芹菜分配队列和工人

Celery distributing Queues and Workers

我是 Celery 的新手,我想了解队列的工作原理。如果我有两个任务,比如 task1 和 task2,我将它们放在不同的队列中,在 task1 上我只使用一个工人,在 task2 上我使用多个工作,task1 一次只 运行 一个,因为我只有一个单身工人? task2 运行 的次数会和我有工人的次数一样多吗?我的理解正确吗?

你很接近。您可以将任务分配到特定队列,并将工作人员配置为仅侦听特定队列,并扩展独立侦听每个队列的工作人员数量。通常,更多的工作人员意味着可以同时执行更多的任务。

但是,仅将一个工人分配给特定 queue/task 并不能保证该任务一次只会执行一个。
默认情况下,worker 启用并发,这意味着单个 worker 可以利用多个进程并发执行任务。此外,还有其他工作设置需要考虑,例如预取和提前确认。

如果要确保一次只能执行一个任务,则不应依赖(缺乏)工作进程的可用性。相反,文档 ensuring a task is executed one at a time 中描述的锁定机制将是一种推荐的方法。

task2 不会因为队列中有工作人员而执行多次,此任务将分配给当时可用的工作人员之一。