Сельдерей-RabbitMQ-порядок исполнения
Я запускаю некоторые длинные задачи, где мне нужно убедиться, что поставленные в очередь задачи выполняются в порядке приема. Что я обнаружил в своих первых тестах, так это то, что когда я достигаю максимального количества рабочих (CELERYD_CONCURRENCY), следующие задачи, которые отправляются, помещаются в очередь, а затем первая из тех, которые должны быть выполнены, фактически является последней, которая будет получена.
Конечно, противоположное поведение-это то, что Im после того, как самые старые сообщения будут выполнены первыми, когда есть свободный работник.
Чем объясняется такое поведение и как его можно изменить?
1 ответ:
Это оказалось результатом установки RabbitMQ prefetchCount, которая предварительно выбирает набор сообщений на канал.
Поскольку я использую очередь для длительных задач, я решил проблему, установив CELERYD_PREFETCH_MULTIPLIER в 1, что по умолчанию равно 4, так что только одно сообщение будет предварительно обработано и порядок выполнения сохранен.