4

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

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

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

4

1 回答 1

5

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

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

于 2013-07-01T11:30:40.453 回答