6

我们在 Supervisor 后面运行 Celery 并以

celeryd --events --loglevel=INFO --concurrency=2

然而,这会创建一个最多三层深度并包含最多 7 个 celeryd 进程的进程图(Supervisor 产生一个 celeryd,它产生几个其他的 celeryd,它再次产生进程)。我们的机器有两个 CPU 内核。

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

4

1 回答 1

4

--concurrency如果是 2,你不应该有 7 个进程。

实际启动的进程是:

  • 主要消费流程

    将工作委托给工作人员池

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

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

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

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

于 2012-08-01T09:50:38.360 回答