在芹菜任务之间共享对象

Share objects between celery tasks

我有一个程序可以处理大约 500 000 个文件 {Ai},对于每个文件,它将获取一个定义 {Di} 进行解析。

目前,每个文件{Ai} 都由专门的celery 任务解析,每次定义文件{Di} 都会再次解析以生成一个对象。该对象用于解析文件{Ai}(JSON表示)。

我想存储定义文件(生成的对象){Di(object)} 以使其可用于整个任务。

所以我想知道管理它的最佳选择是什么:

  1. Memcahe + Python-memcached,
  2. 一个长 运行 任务到 "store" 具有设置(添加)/获取接口的对象。

对于性能和内存使用,最佳选择是什么?

使用 Memcached 听起来像是一个更简单的解决方案 - 任务用于处理,memcached 用于存储 - 为什么使用任务进行存储?

我个人建议使用 Redis 而不是 memcached。

另一种方法是尝试 ZODB - 它本地存储 Python 对象。如果您的应用程序确实遭受序列化开销的困扰,那么这可能会有所帮助。但我强烈建议使用您针对 JSON/memcached 的真实工作负载进行测试。