【发布时间】:2014-05-29 12:12:00
【问题描述】:
我有一个关于芹菜的问题。
我正在向任务队列发送大量数据。
我刚刚尝试了太多的任务数据,以至于它不适合我的记忆。 结果是 celery 被杀死,因为它使用了整个系统内存。
虽然消息不会写入磁盘(代理 rabbitmq)
CELERY_DEFAULT_DELIVERY_MODE = 'persistent'
已设置。
我的任务如下所示:
group(some_iterator).apply_async()
celery 会先尝试序列化整个数据(我用的是pickle),然后发送到任务队列吗?
如果我运行它,我可以看到任务写入磁盘的数据越少。
感谢您的帮助!
【问题讨论】:
-
如果您要向 Celery 任务发送大量数据,最好将其存储在某个数据库中并仅发送给 Celery 任务,只发送 id 列表。当任务运行时,进行 SQL 查询检索必要的数据,处理并将结果保存回数据库。