Celery占用全部内存
我有一个关于Celery的问题。
我正在往任务队列发送大量数据。
我刚试了一下,数据量大到我的内存装不下。
结果是Celery被杀掉了,因为它占用了整个系统的内存。
尽管已经设置了
CELERY_DEFAULT_DELIVERY_MODE = 'persistent'
,消息还是没有写入磁盘(使用的消息代理是rabbitmq)。
我的任务看起来是这样的:
group(some_iterator).apply_async()
Celery是先尝试把所有数据序列化(我用的是pickle),然后再发送到任务队列吗?
如果我运行的数据量少一些,就能看到任务被写入磁盘。
谢谢你的帮助!
1 个回答
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的地方,这样就可以用来获取这些结果。
不过我选择的解决方案是把数据存储在数据库里,让工作者通过ID来获取数据。
希望这能帮助到一些遇到同样问题的人!