Запуск декількох працівників, що використовують селеру


11

Мені потрібно читати з Rabbitmq і виконувати завдання паралельно, використовуючи Celery в єдиній системі.

[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] ...

Здається, що тільки один працівник працює весь час .. тобто один за одним у послідовному порядку. Як я можу налаштувати Celery для запуску декількох робітників для паралельного запуску?

Відповіді:


17

Зараз я оновив свою відповідь після коментаря MartinP стосовно нересту дочірніх процесів, а не ниток:

Селера workerі worker processesрізні речі ( Прочитайте це для довідки ).

Коли запускається працівник, він породжує певну кількість дочірніх процесів.

За замовчуванням кількість цих процесів дорівнює кількості ядер на цій машині.

У 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

Детальнішу інформацію див. У документах із селери


3
Параметр лаконічності не виконує потоки. Він запускає дочірні процеси за замовчуванням, тому паралельно обробляє завдання - docs.celeryproject.org/en/latest/reference/…
MartinP

Як співвідношення одночасності та ниток співвідносяться між собою, якщо паралельність за замовчуванням - це кількість ядер машини, якою буде кількість потоків? Це налаштовується?
Томас Джон

@ThomasJohn Я думаю, що за замовчуванням число для потоків - це все-таки кількість ядер машини. Як правило, ви хочете встановити високий прапор - concurrency для працівників, що працюють з потоками.
FragLegs

0

Я це знайшов

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

Ви можете шукати там примітиви Canvas, ви можете побачити, як скласти групи для паралельного виконання.

клас celery.group (task1 [, task2 [, task3 [, ... taskN]]]) Створює групу завдань, які потрібно виконати паралельно.

В іншому випадку хороший спосіб - зайти на канал IRC і задати спеціальні запитання. Зазвичай є люди, які знають це дуже добре, і вони можуть вам допомогти.


0

Схоже, ваш працівник просто виконує один процес / нитку. Ймовірно, вам просто потрібно додати аргумент --concurrencyабо -cаргумент, коли запускаєте працівника для нерестування декількох (паралельних) екземплярів працівників.

celery -A proj worker -c 4
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.