HdN*_*dN8 4 rabbitmq celery django-celery
我正在运行一些长任务,我需要确保排队的任务按接收顺序执行。我在第一次测试中发现,当我达到最大工人数 (CELERYD_CONCURRENCY) 时,发送的以下任务将排队,然后执行的第一个任务实际上是最新的任务。
当然,相反的行为是我所追求的,当有空闲工人时,最旧的消息是第一个执行的。
这种行为的解释是什么,如何改变?
结果证明这是 Rabbitmq 设置 prefetchCount 的结果,它为每个通道预取一组消息。
由于我将队列用于长时间运行的任务,因此我通过将CELERYD_PREFETCH_MULTIPLIER设置为 1(默认为 4)来解决该问题,这样只会预取一条消息,从而保留执行顺序。
| 归档时间: |
|
| 查看次数: |
1174 次 |
| 最近记录: |