Ausführen mehrerer Mitarbeiter mit Sellerie

11

Ich muss aus Rabbitmq lesen und die Aufgabe parallel mit Sellerie in einem einzigen System ausführen.

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

Es wird nur 1 Arbeiter die ganze Zeit ausgeführt. Das heißt, einer nach dem anderen in sequentieller Reihenfolge. Wie kann ich Sellerie so konfigurieren, dass mehrere Worker parallel ausgeführt werden?

SrC
quelle

Antworten:

17

Ich habe meine Antwort jetzt aktualisiert, nachdem MartinP kommentiert hat, dass Worker untergeordnete Prozesse erzeugen, die keine Threads sind:

Sellerie workerund worker processessind verschiedene Dinge ( Lesen Sie dies als Referenz ).

Wenn ein Worker gestartet wird, erzeugt er eine bestimmte Anzahl von untergeordneten Prozessen.

Die Standardanzahl dieser Prozesse entspricht einer Anzahl von Kernen auf diesem Computer.

Unter Linux können Sie die Anzahl der Kerne überprüfen über:

$ nproc --all

Andernfalls können Sie es selbst angeben, z.

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

Im obigen Beispiel gibt es einen Worker, der 2 untergeordnete Prozesse erzeugen kann. Es wird normalerweise empfohlen, einen einzelnen Worker pro Computer auszuführen. Der Wert für die Parallelität definiert, wie viele Prozesse parallel ausgeführt werden. Wenn jedoch mehrere Worker ausgeführt werden müssen, können Sie sie wie unten gezeigt starten:

$ 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

Weitere Informationen finden Sie in den Sellerie- Dokumenten

elnurcoot
quelle
2
Der Concurency-Parameter führt keine Threads aus. Standardmäßig werden untergeordnete
MartinP
Wie hängen die Parallelität und die Threads zusammen? Wenn die Standard-Parallelität die Anzahl der Kerne des Computers ist, wie viele Threads gibt es dann? Ist es konfigurierbar?
Thomas John
@ ThomasJohn Ich denke, die Standardnummer für Threads ist immer noch die Anzahl der Kerne der Maschine. Im Allgemeinen sollten Sie das Flag --concurrency für threadbasierte Worker hoch setzen.
FragLegs
0

Ich habe das gefunden

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

Dort können Sie nach Canvas-Grundelementen suchen und sehen, wie Sie Gruppen für die parallele Ausführung erstellen.

Klasse celery.group (task1 [, task2 [, task3 [,… taskN]]) Erstellt eine Gruppe von Aufgaben, die parallel ausgeführt werden sollen.

Andernfalls ist es eine gute Möglichkeit, zum IRC-Kanal zu gehen und diese speziellen Fragen zu stellen. Normalerweise gibt es Leute, die das sehr gut wissen und Ihnen helfen können.

René Höhle
quelle
0

Sieht so aus, als würde Ihr Mitarbeiter nur einen einzelnen Prozess / Thread ausführen. Sie müssen wahrscheinlich nur das Argument --concurrencyoder-c hinzufügen, wenn Sie den Worker starten, um mehrere (parallele) Worker-Instanzen zu erzeugen.

celery -A proj worker -c 4
Jamie B.
quelle