Укажите работника в сельдерее - PullRequest
0 голосов
/ 31 января 2019

У меня есть два рабочих:

celery worker -l info --concurrency=2 -A o_broker -n main_worker
celery worker -l info --concurrency=2 -A o_broker -n second_worker

Я использую flower для мониторинга и получения запросов API для этих рабочих:

flower -A o_broker

для запуска этих рабочих из сельдерея из API, который я используюцветок согласно документам :

curl -X POST -d '{"args":[1,2]}' 'http://localhost:5555/api/task/async-apply/o_broker.add'

Однако с помощью этого запроса POST он запускает задачу на одном из рабочих.Мне нужно выбрать запуск определенного брокера для выполнения задачи.

Как мне указать или настроить это, чтобы я мог выбрать, какой рабочий использовать для задачи add?Если у вас есть решение, использующее другой API без цветка, это также сработает.

1 Ответ

0 голосов
/ 01 февраля 2019

Самый простой способ добиться этого - использовать отдельные очереди.Начните рабочий с -Q first_worker,celery, а второй брокер с -Q second_worker,celery.celery - это имя очереди по умолчанию в celery.

Теперь, когда вы хотите отправить задачу только первому рабочему, вы можете направить задачу в очередь first_worker с помощью сельдерея task_routes настройка .Вы обрабатываете задачи маршрутизации в очередь second_worker симметрично.Вы также можете вручную перенаправить вызов конкретной задачи в определенную очередь при использовании apply_async, например:

add.apply_async(args=(1, 2), queue='first_worker')

nb, в последний раз я проверял, flower будет отслеживать только одну из ваших очередей(по умолчанию это очередь сельдерея).

...