Выполнение нескольких рабочих, использующих Сельдерей

Я должен читать из Rabbitmq и выполнить задачу в параллельном Сельдерее использования в единой системе.

[2014-12-30 15:54:22,374: INFO/Worker-1] ...   
[2014-12-30 15:54:23,401: INFO/Worker-1] ...
[2014-12-30 15:54:30,878: INFO/Worker-1] ...
[2014-12-30 15:54:32,209: INFO/Worker-1] ...
[2014-12-30 15:54:33,255: INFO/Worker-1] ...
[2014-12-30 15:54:48,445: INFO/Worker-1] ...
[2014-12-30 15:54:49,811: INFO/Worker-1] ...
[2014-12-30 15:54:50,903: INFO/Worker-1] ...
[2014-12-30 15:55:39,674: INFO/Worker-1] ...
[2014-12-30 15:55:41,024: INFO/Worker-1] ...
[2014-12-30 15:55:42,147: INFO/Worker-1] ...

Это швы только 1 рабочий работает все время.. т.е. один за другим в последовательном порядке. Как я могу настроить Сельдерей для выполнения нескольких рабочих для хождения параллельно?

11
задан 30 December 2014 в 13:41
3 ответа

Я нашел это

http://docs.celeryproject.org/en/latest/reference/celery.html?highlight=parallel

Вы можете найти примитивы Canvas , там вы можете увидеть, как создавать группы для параллельного исполнения.

class celery.group (task1 [, task2 [, task3 [,… taskN]]]) Создает группу задач, которые будут выполняться параллельно.

В противном случае лучше перейти на канал IRC и задать специальные вопросы. Обычно есть люди, которые очень хорошо это знают и могут вам помочь.

0
ответ дан 2 December 2019 в 21:48

Похоже, ваш рабочий процесс просто запускает один процесс / поток. Вероятно, вам просто нужно добавить аргумент - concurrency или -c при запуске рабочего для создания нескольких (параллельных) экземпляров рабочих процессов.

celery -A proj worker -c 4
0
ответ дан 2 December 2019 в 21:48

Теперь я обновил свой ответ после комментария от MartinP относительно дочерних процессов, порождающих рабочие, а не потоков:

Celery worker и рабочие процессы являются разные вещи ( Прочтите это для справки ).

Когда рабочий запускается, он порождает определенное количество дочерних процессов.

По умолчанию количество этих процессов равно количеству ядер на этой машине.

В Linux вы можете проверить количество ядер с помощью:

$ nproc --all

В противном случае вы можете указать его самостоятельно, например :

$ celery -A proj worker --loglevel=INFO --concurrency=2

В приведенном выше примере есть один рабочий процесс, который сможет порождать 2 дочерних процесса. Обычно рекомендуется запускать одного рабочего на каждую машину, и значение параллелизма будет определять, сколько процессов будет выполняться параллельно, но если для запуска требуется несколько рабочих процессов, вы можете запустить их, как показано ниже:

$ celery -A proj worker -l info --concurrency=4 -n wkr1@hostname
$ celery -A proj worker -l info --concurrency=2 -n wkr2@hostname
$ celery -A proj worker -l info --concurrency=2 -n wkr3@hostname

Обратитесь к сельдерею документы для получения дополнительной информации

17
ответ дан 2 December 2019 в 21:48

Теги

Похожие вопросы