我正在运行一些长任务,我需要确保排队的任务按接收顺序执行。我在第一次测试中发现的是,当我达到最大工作人数(CELERYD_CONCURRENCY)时,发送的以下任务会排队,然后第一个要执行的任务实际上是要接收的最新任务。
当然,相反的行为就是我所追求的,当有自由工作者时,最早的消息是第一个被执行的。
此行为的解释是什么?如何更改?
答案 0 :(得分:3)
这结果是Rabbitmq设置prefetchCount的结果,它预取每个通道的一组消息。
由于我使用队列进行长时间运行的任务,我通过将CELERYD_PREFETCH_MULTIPLIER设置为1(默认为4)来解决问题,因此只预取了一条消息,因此保留了执行顺序。