我有一个关于芹菜的问题。
我将大量数据发送到任务队列。
我只是尝试了这么多的任务数据,它不适合我的记忆。 结果是芹菜被杀死了,因为它使用整个系统内存。
尽管
,但不会将消息写入磁盘(broker rabbitmq)CELERY_DEFAULT_DELIVERY_MODE = 'persistent'
已设定。
我的任务如下:
group(some_iterator).apply_async()
芹菜是否首先尝试序列化整个数据(我正在使用pickle),然后将其发送到任务队列?
如果我运行它,我可以看到更少的数据,任务被写入磁盘。
感谢您的帮助!
答案 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获取它。
希望能帮助一些人面对同样的问题!