Сельдерей: на задание 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 быстрой записью соответственно.