Celery启动命令行

时间:2016-05-24 05:20:16

标签: python celery gevent

对于gevent pool,我们可以使用参数' -c'指定greenlet编号。如下所示。

celery worker -A celerytasks.celery_worker_init -P gevent -c 1000 --loglevel=info

但它的主要价值是什么?

这对于“绿色数字”真正意味着什么?如果我指定1000个greenlets,如果它们用完了会发生什么?

1 个答案:

答案 0 :(得分:1)

-c参数是一个Celery参数,允许您指定从工作人员同时执行多少任务,这里是doc的摘录:

  

可以使用--concurrency参数更改工作进程/线程数,默认为计算机上可用的CPU数。

当运行芹菜并指示使用gevent时,这意味着不使用prefork芹菜将使用绿色线程来处理您的任务。 在这种情况下,您可以参考此页面关于eventlet on celery docs与gevent不一样,但适用相同的概念。

这是一个可以帮助您理解的摘录:

  

prefork池可以使用多个进程,但是每个CPU通常只限于几个进程。使用Eventlet,您可以有效地生成数百或数千个绿色线程。

但请注意,gevent或eventlet并不总是比prefork更好,通常取决于你需要执行什么类型的任务,如文档的这一部分所述:

  

Celery支持Eventlet作为替代执行池实现。它在某些情况下优于prefork,但您需要确保您的任务不执行阻塞调用,因为这将暂停工作程序中的所有其他操作,直到阻塞调用返回。

关于尺寸标注很难回答,因为这也很大程度上取决于您的任务类型和平均负载。 根据我的个人经验,对于一个芹菜工人来说,最好不要超过1000-3000。

最后一点,芹菜文档看起来gevent仍然在experimental state,你可能想要使用eventlet。