В сельдерее, какая цель состоит в том, чтобы несколько работников обрабатывали одну и ту же очередь?
В документации для celeryd-multi мы находим этот пример:
# Advanced example starting 10 workers in the background:
# * Three of the workers processes the images and video queue
# * Two of the workers processes the data queue with loglevel DEBUG
# * the rest processes the default' queue.
$ celeryd-multi start 10 -l INFO -Q:1-3 images,video -Q:4,5 data
-Q default -L:4,5 DEBUG
(Отсюда: http://docs.celeryproject.org/en/latest/reference/celery.bin.celeryd_multi.html#examples)
Каким будет практический пример того, почему было бы полезно иметь более одного рабочего на одном хост-процессе одну и ту же очередь, как в приведенном выше примере? Разве это не то, что настройка concurrency для?
В частности, будет ли какая-либо практическая разница между следующими двумя строками (A и B)?:
А:
$ celeryd-multi start 10 -c 2 -Q data
В:
$ celeryd-multi start 1 -c 20 -Q data
Я обеспокоен тем, что мне не хватает какой-то ценной информации о очередях задач, когда я не понимаю эту практическую разницу, и я был бы очень признателен, если бы кто-нибудь мог просветить меня.
Спасибо!
Ответы
Ответ 1
Каким будет практический пример того, почему было бы хорошо иметь больше чем один рабочий из одного хост-процесса в той же очереди, что и в выше примера?
Ответ:
Таким образом, вы можете запустить несколько экземпляров сотрудников на одном компьютере node, если:
-
Вы используете многопроцессорный пул и хотите использовать сообщения параллельно. Некоторые из них показывают более высокую производительность, используя экземпляров вместо запуска одного экземпляра со множеством пулов работников.
-
Вы используете eventlet/gevent (и из-за печально известного GIL, также пула потоков), и вы хотите выполнять задачи на нескольких CPU ядра.
Ссылка: http://www.quora.com/Celery-distributed-task-queue/What-is-the-difference-between-workers-and-processes