#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. Спасибо, именно так я наконец это и сделал.