在Celery文档的Concurrency部分中,它声明:
...将Eventlet和prefork工作者混合起来,并按照路由任务 兼容性或最佳效果
来源:http://celery.readthedocs.org/en/latest/userguide/concurrency/eventlet.html#concurrency-eventlet
这意味着可以让工作人员使用gevent / eventlet池实现,而另一个人使用prefork池。
使用celery multi
:
celery -A proj multi start 2 -P gevent -c 1000
这会启动2个gevent worker,但是如何在使用celery multi
时基于每个worker指定池实现,以便一个worker使用gevent池而另一个使用prefork?
celery multi
文档没有提及有关此特定事项的任何内容,而源代码(celery.bin.multi
)并未真正表明这是可能的(除非我误读/误解)代码)。
答案 0 :(得分:3)
因此,目前指定每个工作池实现的唯一方法是运行独立的celery worker
命令:
$ celery -A proj worker start -P gevent -Q:queue1 -c 500
$ celery -A proj worker start -P prefork -Q:queue2 -c 4
celery multi
不支持-P:worker1 gevent, -P:worker2 prefork
。当使用Celery docs中提供的init.d脚本来守护celeryd时,这会很困难。因此,您必须修改init.d脚本或使用Supervisor之类的东西。
答案 1 :(得分:1)