Ami*_*deh 5 django concurrency celery gevent eventlet
在Celery文档的Concurrency部分中,它声明:
...将Eventlet和prefork工作者混合使用,并根据兼容性或最佳效果来路由任务
资料来源:http://celery.readthedocs.org/en/latest/userguide/concurrency/eventlet.html#concurrency-eventlet
这意味着可以让一个worker使用gevent/eventlet池实现,而另一个使用prefork池.
使用以下命令创建多个工作程序时,可以指定池实现celery multi:
celery -A proj multi start 2 -P gevent -c 1000
Run Code Online (Sandbox Code Playgroud)
这将启动2个gevent worker,但是如何在使用时基于每个worker指定池实现celery multi,以便一个worker使用gevent池而另一个使用prefork?
该celery multi文档没有提到关于该特定事项中任何东西,和源代码(celery.bin.multi)并没有真正证明这是可能的(除非我误解/误解的代码).
因此,目前指定每个工作池实现的唯一方法是运行独立的celery worker命令:
$ celery -A proj worker start -P gevent -Q:queue1 -c 500
$ celery -A proj worker start -P prefork -Q:queue2 -c 4
Run Code Online (Sandbox Code Playgroud)
celery multi不支持-P:worker1 gevent, -P:worker2 prefork。当使用 Celery文档中提供的 init.d 脚本来守护 celeryd 时,这会让事情变得困难。所以你要么必须修改 init.d 脚本,要么使用类似 Supervisor 的东西。
| 归档时间: |
|
| 查看次数: |
2008 次 |
| 最近记录: |