【问题标题】:Celery distributing Queues and Workers芹菜分配队列和工人
【发布时间】:2023-04-08 07:39:01
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢你,并指出我可以在 Celery 中执行此操作的文档。我现在将阅读有关如何锁定特定任务的文档。
    【解决方案2】:

    task2 的执行次数不会与该队列中的工作人员一样多,此任务将分配给当时可用的工作人员之一。

    【讨论】:

      猜你喜欢
      • 2014-06-09
      • 2017-08-15
      • 2019-07-08
      • 1970-01-01
      • 1970-01-01
      • 2014-11-24
      • 1970-01-01
      • 2018-07-12
      • 2014-08-17
      相关资源
      最近更新 更多