【问题标题】:Celery - RabbitMQ - execution orderCelery - RabbitMQ - 执行顺序
【发布时间】:2013-06-25 16:17:23
【问题描述】:

我正在运行一些长任务,我需要确保排队的任务按接收顺序执行。我在第一次测试中发现,当我达到最大工作人员数 (CELERYD_CONCURRENCY) 时,发送的以下任务会排队,然后第一个要执行的任务实际上是要接收的最新任务。

当然,相反的行为是我所追求的,即当有空闲工作人员时,最旧的消息首先被执行。

这种行为的解释是什么?如何改变它?

【问题讨论】:

    标签: rabbitmq celery django-celery


    【解决方案1】:

    这原来是 Rabbitmq 设置 prefetchCount 的结果,它为每个通道预取一组消息。

    由于我将队列用于长时间运行的任务,我通过将CELERYD_PREFETCH_MULTIPLIER 设置为 1(默认为 4)解决了这个问题,这样只预取了一条消息,因此保留了执行顺序。

    【讨论】:

      猜你喜欢
      • 2012-06-26
      • 1970-01-01
      • 1970-01-01
      • 2014-01-18
      • 1970-01-01
      • 2015-07-10
      • 2015-08-08
      • 1970-01-01
      • 2019-03-17
      相关资源
      最近更新 更多