芹菜分配队列和工人

时间:2018-12-26 04:39:29

标签: python celery django-celery celery-task celerybeat

我是Celery的新手,我试图了解队列的工作方式。如果我有两个任务,比如说task1和task2,并且将它们放在不同的队列中,并且在task1上我仅使用一个工作人员,在task2上我使用多个工作,由于我只有一个工作人员,因此task1一次只能运行一个吗?并且task2会像我有工人时一样运行多次吗?我的理解正确吗?

2 个答案:

答案 0 :(得分:1)

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

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

如果要确保一次只能执行一项任务,则不应依赖工作进程的(缺乏)可用性。取而代之的是,建议使用文档ensuring a task is executed one at a time中所述的锁定机制。

答案 1 :(得分:0)

task2的执行次数不会与该队列中有工作程序的次数相同,该任务将分发给当时有空的一个工作程序。