celeryd进程的数量是否取决于--concurrency设置?

Han*_*ruß 6 python concurrency celery celeryd

我们在Supervisor后面运行Celery并启动它

celeryd --events --loglevel=INFO --concurrency=2
Run Code Online (Sandbox Code Playgroud)

但是,这会创建一个最多三层深度的流程图,最多包含7个芹菜流程(Supervisor会产生一个celeryd,产生其他几个,再次产生流程).我们的机器有两个CPU核心.

所有这些流程都在处理任务吗?也许其中一些只是工人池?--concurrency设置如何与实际生成的进程数相关联?

ask*_*sol 4

如果是 2,则不应有 7 个进程--concurrency

实际启动的进程是:

  • 主要消费流程

    将工作委托给工作池

  • 工作池(这是决定的数字--concurrency

所以这是 3 个进程,并发数为 2。

此外,如果启用了force_execv(默认情况下,如果您使用的是redis或rabbitmq之外的其他传输方式),则会启动一个用于清理信号量的非常轻量级的进程。

请注意,在某些情况下,进程列表还包括线程。如果使用除rabbitmq/redis之外的传输,worker可能会启动多个线程,其中包括一个除非启用否则始终启动的Mediator线程CELERY_DISABLE_RATE_LIMITS