2017-02-24 2 views
2

Ich bin neu zu Sellerie und Redis.Sellerie mehrere Arbeiter aber eine Warteschlange

Ich startete meinen Redis-Server mit redis-server.

Sellerie wurde mit diesem Parameter ausführen

celery -A proj worker 

Es gibt keine andere Konfigurationen. Allerdings habe ich festgestellt, dass, wenn ich einen langen Job in Sellerie habe, es eine andere Aufgabe, die in der Warteschlange ist, nicht bearbeitet, bis die langwierige Aufgabe abgeschlossen ist. Mein Verständnis ist, dass ich, da ich 8 Kerne auf meiner CPU habe, in der Lage sein, 8 Aufgaben gleichzeitig zu verarbeiten, da der Standardparameter für -c die Anzahl der Kerne ist?

Fehle ich hier etwas?

Antwort

4

Ihr Problem ist klassisch, jeder traf diese, die lang laufende Aufgaben hatte.

Die Hauptursache ist, dass Sellerie versucht, Ihren Ausführungsfluss zu optimieren und einige Aufgaben für jeden Arbeiter zu reservieren. Aber wenn eine dieser Aufgaben lange läuft, werden die anderen gesperrt. Es ist bekannt als 'Prefetch Count'. Denn Sellerie ist standardmäßig für kurze Aufgaben aufgestellt.

Eine andere verwandte Einstellung ist eine "späte Bestätigung". Standardmäßig nimmt der Worker eine Aufgabe aus der Warteschlange und sendet sofort ein Bestätigungssignal. Dann entfernt der Broker diese Aufgabe aus der Warteschlange. Dies bedeutet jedoch, dass mehr Nachrichten für diesen Worker vorabgerufen werden. "späte Bestätigung" aktiviert, dass der Arbeiter die Bestätigung erst nach Abschluss der Aufgabe sendet.

Dies ist nur in zwei Worten. Sie können read more about prefetch and late ack.

Was die Lösung - benutzen Sie einfach diese Einstellungen (Sellerie 4.x):

task_acks_late = True 
worker_prefetch_multiplier = 1 

oder für frühere Versionen (2.x - 3.x):

CELERY_ACKS_LATE = True 
CELERYD_PREFETCH_MULTIPLIER = 1 

Auch Starten des Arbeiters mit Parameter -0fair macht das gleiche.

Verwandte Themen