Назначьте определенное количество рабочих для каждой задачи Celery в Python

#python #celery #celery-task

#python #сельдерей #сельдерей-задача

Вопрос:

У меня есть три задачи сельдерея:

  • прогнозирование
  • Обучение
  • проверка работоспособности

И у меня есть 4 процессора в машине. Я хотел бы выделить 3 рабочих для прогнозирования и обучения и 1 для проверки работоспособности. Каков самый простой способ реализовать это? Обратите внимание, что я собираюсь запланировать эти задачи, и поэтому я не могу указать количество рабочих в функции apply_async () напрямую.

Актуальные конфигурации:

 CELERY = Celery(
    CELERY_APP_NAME,
    backend=CELERY_BACKEND,
    broker=CELERY_BROKER,
    include=["src.tasks"],
)

CELERY.conf.update({"task_routes": {"src.tasks.*": {"queue": "input_queue"}},
                    }
                   )


@CELERY.task
def prediction():
    pass

@CELERY.task
def training():
    pass

@CELERY.task
def healthcheck():
    pass
  

И команду для запуска рабочего:

celery --loglevel=INFO -A src.tasks worker -Q input_queue

Ответ №1:

Вот как я бы это сделал, потому что я никогда не мог по-настоящему понять celery multi :

  • celery -A yourproject.yourapp -l info -c 3 -Q prediction
  • celery -A yourproject.yourapp -l info -c 1 -Q healthcheck

После того, как вы запустите что-то похожее на описанное выше (с правильным параметром приложения), вы получите двух работников, подписанных на разные очереди. Ваши задачи прогнозирования и обучения будут запускаться с queue=prediction среди других именованных параметров, в то время как задача проверки работоспособности должна быть отправлена в healthcheck очередь аналогичным образом.

Комментарии:

1. Спасибо, именно так я наконец это и сделал.