0

我很难把多线程并发在 celery 中的工作方式放在一起。

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

但它看起来也像(从这里的例子)我不能简单地指定-P eventlet并开始触发任务,我必须通过启动并行任务celery.group。据此多进程工作者永远不会并行消费消息。

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

这个对吗?

4

1 回答 1

0

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

于 2014-04-17T11:57:22.280 回答