Сельдерей: на задание concurrency лимиты (количество рабочих на задание)?
Можно ли установить concurrency (количество одновременных работников) на уровне каждой задачи в Celery? Я ищу что-то более тонкое, которое CELERYD_CONCURRENCY
(которое устанавливает concurrency для всего демона).
Сценарий использования: у меня есть один celerlyd, выполняющий разные типы задач с очень разными характеристиками производительности - некоторые быстрые, некоторые очень медленные. Для некоторых я хотел бы сделать столько, сколько могу, насколько это возможно, для других, которые я хотел бы обеспечить, чтобы в любой момент был запущен только один экземпляр (т.е. concurrency из 1).
Ответы
Ответ 1
Вы можете использовать автоматическую маршрутизацию для маршрутизации задач в разные очереди, которые будут обрабатываться работниками сельдерея с различными уровнями concurrency.
celeryd-multi start fast slow -c: slow 3 -c: fast 5
Эта команда запускает 2 работников сельдерея, которые слушают быстрые и медленные очереди с уровнями 3 и 5 concurrency соответственно.
CELERY_ROUTES = { "tasks.a": { "queue": "slow" }, "tasks.b": { "queue": "Быстрый" }}
Задачи с типом tasks.a будут обрабатываться медленными задачами queue и tasks.b быстрой записью соответственно.