Uruchamianie wielu pracowników za pomocą Selera


11

Muszę czytać z Rabbitmq i wykonywać zadania równolegle, używając Selera w jednym systemie.

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

Wygląda na to, że tylko jeden pracownik pracuje cały czas, tzn. Jeden po drugim w kolejności sekwencyjnej. Jak mogę skonfigurować Celery do uruchamiania wielu pracowników równolegle?

Odpowiedzi:


17

Zaktualizowałem teraz moją odpowiedź po komentarzu MartinP dotyczącym procesu potomnego procesów spawnujących, a nie wątków:

Seler workeri worker processessą różne rzeczy ( Przeczytaj to w celach informacyjnych ).

Po uruchomieniu pracownik odradza pewną liczbę procesów potomnych.

Domyślna liczba tych procesów jest równa liczbie rdzeni na tym komputerze.

W systemie Linux możesz sprawdzić liczbę rdzeni poprzez:

$ nproc --all

W przeciwnym razie możesz to określić samodzielnie, na przykład:

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

W powyższym przykładzie jest jeden pracownik, który będzie w stanie odrodzić 2 procesy potomne. Zwykle zaleca się uruchamianie jednego pracownika na maszynę, a wartość współbieżności określi, ile procesów będzie działać równolegle, ale jeśli wielu pracowników wymaga uruchomienia, możesz je uruchomić, jak pokazano poniżej:

$ 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

Więcej informacji można znaleźć w dokumentach dotyczących selera


3
parametr concurency nie uruchamia wątków. Domyślnie uruchamia procesy potomne, więc równolegle przetwarza zadania - docs.celeryproject.org/en/latest/reference/…
MartinP

Jak współbieżność i wątki wiążą się ze sobą, jeśli domyślną współbieżnością jest liczba rdzeni maszyny, jaka będzie liczba wątków? Czy można to skonfigurować?
Thomas John

@ThomasJohn Myślę, że domyślną liczbą wątków jest wciąż liczba rdzeni maszyny. Zasadniczo warto ustawić flagę --concurrency jako wysoką dla pracowników opartych na wątkach.
FragLegs,

0

Znalazłem to

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

Możesz poszukać prymitywów Canvas, gdzie możesz zobaczyć, jak tworzyć grupy do równoległego wykonywania.

klasa celery.group (task1 [, task2 [, task3 [,… taskN]]]) Tworzy grupę zadań do wykonania równoległego.

W przeciwnym razie dobrym sposobem jest przejście na kanał IRC i zadanie specjalnych pytań. Zwykle są ludzie, którzy wiedzą to bardzo dobrze i mogą ci pomóc.


0

Wygląda na to, że pracownik wykonuje tylko jeden proces / wątek. Prawdopodobnie po prostu musisz dodać argument --concurrencylub-c podczas uruchamiania procesu roboczego, aby spawnować wiele (równoległych) instancji procesu roboczego.

celery -A proj worker -c 4
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.