Celery池类型和并发性

时间:2014-03-21 03:04:10

标签: python django celery django-celery eventlet

我很难将芹菜中的多线程并发工作结合起来。

看起来使用的默认类型是-P eventlet。我假设-P threads由于GIL而不起作用,并且在实践中不存在并发性。

但它看起来也像(来自示例here)我不能简单地指定-P eventlet并开始解雇任务,我必须通过celery.group启动并行任务。根据{{​​3}},多进程工作者永远不会并行使用消息。

因此,总而言之,它看起来像是真正的任务并行化,我必须使用多处理。我可以使用eventlet,但我必须修改我的任务运行方式。我的任务是随机触发以响应外部触发器,所以我不知道我需要创建的时间和数量 - 所以看起来我不能使用eventlet作为我的用例。

这是对的吗?

1 个答案:

答案 0 :(得分:0)

我刚开始尝试自己使用eventlet池,但是从目前为止我所知道的,不,你不需要使用group()来调用你的任务来利用它的并发性。我认为他们用它作为例子只是巧合。不过,这两个概念可能经常在一起很好。我仍然在Python for循环中使用单独的apply_async()调用应用了eventlet并发,如果你不需要GroupResult功能(参见http://celery.readthedocs.org/en/latest/userguide/canvas.html#groups),这可能很好。