gpt4 book ai didi

python - 大内存 Python 后台作业

转载 作者:IT老高 更新时间:2023-10-28 12:30:28 26 4
gpt4 key购买 nike

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

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

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

由于参数包含要保存到数据库的信息,它非常大(〜50MB),当它被序列化并保存到Redis时,不仅需要大量时间,而且消耗大量的内存。 Heroku 上的 Redis 计划仅 100MB 的费用为每分钟 30 美元。事实上,我经常遇到 OOM 错误,例如:

使用内存时不允许使用OOM命令>'maxmemory'。

我有两个问题:

  1. python-rq 是否非常适合这项任务,还是 Celery 的 JSON 序列化更合适?
  2. 有没有办法不序列化参数而是引用它?

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

最佳答案

由于您在评论中提到您的任务输入是一大堆键值对,我将推荐以下内容:

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

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

  • 快速将您的任务分解为可管理的 block 。
  • 将这些小型压缩文件快速上传到 S3(使用 gzip)。
  • 通过网络传输的数据要少得多,从而大大减少了您的 redis 使用量。
  • 将 S3 配置为在一定时间后自动删除您的文件(S3 对此有设置:例如,您可以让它在 1 天后自动删除)。
  • 通过一次处理一行文件来大大减少工作人员的内存消耗。

对于像您正在做的事情这样的用例,与通过您的排队系统发送这些项目相比,这将快得多并且所需的开销也少得多。

希望这会有所帮助!

关于python - 大内存 Python 后台作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41461708/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com