Работник не потребляет задачи после того, как сельдерей вызывается add_consumer
Я бы хотел использовать Celery (с RabbitMQ как backend MQ) для выполнения задач различного вкуса через разные очереди. Одно из требований заключается в том, что потребление (рабочими) из конкретной очереди должно иметь возможность приостанавливаться и возобновляться.
Сельдерей, похоже, эту возможность посредством вызова add_consumer
и cancel_consumer
. Хотя мне удалось отменить потребление задач из очереди для конкретного работника, я не могу заставить работника возобновить потребление, вызвав add_consumer
. Код для воспроизведения этой проблемы приведен ниже. Мое предположение, вероятно, я пропускаю какой-то параметр, который должен быть предоставлен либо в celeryconfig
, либо через аргументы при запуске рабочих?
Было бы здорово получить несколько свежих пар глаз. В Stackoverflow не так много обсуждений относительно add_consumer и Github. Поэтому я надеюсь, что некоторые эксперты готовы поделиться своими мыслями/опытом.
-
Я запускаю следующее:
ОС Windows, RabbitMQ 3.5.6, Erlang 18.1, Python 3.3.5, сельдерей 3.1.15
Ответы
Ответ 1
Чтобы вернуться из очереди, вам нужно указать имя очереди, а также целевых работников. Вот как это сделать.
app.control.add_consumer(queue='high', destination=['[email protected]'])
Вот подпись add_consumer
def add_consumer(state, queue, exchange=None, exchange_type=None,
routing_key=None, **options):
В вашем случае вы вызываете
app.control.add_consumer('high', destination=['[email protected]'])
Итак, high
переходит в состояние, а очередь пуста. Таким образом, он не может возобновить работу.