芹菜:工人数量与并发性

Celery: number of workers vs concurrency

有什么区别:

  1. 一个并发 4 的工作人员或
  2. 两个工人每个并发 2

对于同一个队列。

谢谢

有趣的问题。

我能想到的(肯定还有很多):

  • 对于高可用性:
    1. 您需要不止一台机器(如果其中一台出现故障)- 因此您必须在每台机器上使用 worker。
    2. 即使是一台机器 - 我认为在两个不同的进程中有 2 个 运行 的工人比一个高并发的工人更安全(如果我错了请纠正我,但我认为它已实现带线程)。
  • docs 中,我看到他们建议使用每个 CPU 的并发性。
  • 如果您想将不同的任务分配给不同的工作人员..

当然,你要为此付出代价:更多进程占用更多资源(CPU/Memory 等)。

我发现这个 非常相似。

我假设您运行在同一台机器上安装两个工人。在那种情况下,我建议您为一个队列维护一个工作人员。

  • 同一个队列的两个工作人员对您没有任何好处。它只会增加内存浪费。
  • 当你有多个队列时,两个或更多工作人员,以保持优先级或为每个工作人员分配不同数量的核心。
  • 单个队列的两个或多个工作人员 如果您 运行 工作人员在不同的机器上,则很有用。不同机器上的 worker 从同一个队列中消费任务,你可以根据每台机器上可用的内核来分配并发性。

我确实意识到我在 2 年多后才做出回应。但我只是想我会把它放在这里,以供仍然有类似疑问的任何人使用。