芹菜消耗全部记忆

时间:2014-05-29 12:12:00

标签: python celery

我有一个关于芹菜的问题。

我将大量数据发送到任务队列。

我只是尝试了这么多的任务数据,它不适合我的记忆。 结果是芹菜被杀死了,因为它使用整个系统内存。

尽管

,但不会将消息写入磁盘(broker rabbitmq)
CELERY_DEFAULT_DELIVERY_MODE = 'persistent'

已设定。

我的任务如下:

group(some_iterator).apply_async()

芹菜是否首先尝试序列化整个数据(我正在使用pickle),然后将其发送到任务队列?

如果我运行它,我可以看到更少的数据,任务被写入磁盘。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我发现有可能实现这种行为:

result_group = GroupResult(results = [])
for task_args task_arg_generator:
    task = analyze_task.delay(*task_args)
    result_group.add(task)


result_group.get()
# or :
result_group.join_native()

此序列化并单独发送每个任务,并将其收集在ResultGroup中,该ResultGroup可用于检索组结果。

但我选择的解决方案是将数据存储在数据库中,让工作人员通过id获取它。

希望能帮助一些人面对同样的问题!