2012-02-06 5 views
15

Можно ли установить параллелизм (количество одновременных работников) на уровне каждой задачи в Celery? Я ищу что-то более мелкозернистый, который CELERYD_CONCURRENCY (который устанавливает параллелизм для всего демона).Сельдерей: за пределы параллелизма задачи (количество рабочих на задание)?

Сценарий использования: у меня есть один celerlyd, выполняющий разные типы задач с очень разными характеристиками производительности - некоторые быстрые, некоторые очень медленные. Для некоторых я хотел бы сделать столько, сколько могу, насколько это возможно, для других, которые я хотел бы обеспечить, чтобы в любой момент был запущен только один экземпляр (т. Е. Параллелизм 1).

ответ

25

Вы можете использовать automatic routing для маршрутизации задач в разные очереди, которые будут обрабатываться работниками сельдерей с различными уровнями параллелизма.

celeryd-мульти старт быстрый медленный -c: медленный 3 -c: быстрый 5

Эта команда запускает 2 сельдерей рабочие слушают быстро и медленные очереди с 3 и 5 уровней параллелизма соответственно ,

CELERY_ROUTES = { "tasks.a": { "очередь": "медленные"}, "tasks.b": { "очередь": "быстрый"}}

Задачи с типом tasks.a будет обрабатываться slow Задачи queue и tasks.b на быстро очереди соответственно.

+1

Thanks 0x00mh. Поэтому я могу определить параллелизм в очередях, но не в задачах. И я считаю, что это означает, что я начинаю несколько демонов сельдерея. Поэтому я предполагаю, что это означает, что нет возможности установить параллелизм для каждой задачи без использования отдельного демона? – Parand

+0

CELERYD_CONCURRENCY определяет, сколько процессов (рабочих процессов) запускается. Рабочие процессы самостоятельно обрабатывают сообщения от брокера. Сообщение содержит имя задачи для выполнения. – mher