您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

大内存Python后台作业

5b51 2022/1/14 8:21:49 python 字数 3750 阅读 517 来源 www.jb51.cc/python

我正在运行Flask服务器,它将数据加载到MongoDB数据库中.由于存在大量数据,这需要很长时间,我想通过后台工作来完成这项工作.我使用Redis作为消息代理和Python-rq来实现作业队列.所有代码都在Heroku上运行.据我所知,python-rq使用pickle来序列化要执行的函数,包括参数,并将其与其他值一起添加到Redis哈希值.由于参数包含要

概述

我正在运行Flask服务器,它将数据加载到MongoDB数据库中.由于存在大量数据,这需要很长时间,我想通过后台工作来完成这项工作.

我使用Redis作为消息代理和Python-rq来实现作业队列.所有代码都在Heroku上运行.

据我所知,python-rq使用pickle来序列化要执行的函数,包括参数,并将其与其他值一起添加到Redis哈希值.

由于参数包含要保存到数据库的信息,因此它非常大(约50MB),当它被序列化并保存到Redis时,不仅耗费了大量时间,而且还消耗了大量内存. Heris的Heroku计划仅售100美元,售价30美元.事实上我经常会遇到OOM错误

使用内存时不允许使用OOM命令> ‘maxmemory’.

我有两个问题:

> python-rq是否适合这项任务,或者Celery的JSON序列化更合适?
>有没有办法不序列化参数,而是引用它?

您对最佳解决方案的想法非常感谢!

>加载文件中的键/值对列表.
>将文件上传到Amazon S3.
>获取生成文件URL,并将其传递给RQ任务.
>在您的工作人员任务中,下载该文件.
>逐行解析文件,将文档插入Mongo.

使用上述方法,您将能够:

>快速将您的任务分解为可管理的块.
>快速将这些小的压缩文件上传到S3(使用gzip).
>通过线路传递的数据要少得多,大大减少了redis的使用.
>将S3配置为在一定时间后自动删除文件(有S3设置:例如,您可以在1天后自动删除它).
>通过一次处理一行文件,大大减少工作人员的内存消耗.

对于像你正在做的那样的用例,这将比通过你的排队系统发送这些项目更快,并且所需的开销要少得多.

希望这可以帮助!

总结

以上是编程之家为你收集整理的大内存Python后台作业全部内容,希望文章能够帮你解决大内存Python后台作业所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶