Python-Sellerie-task neu zu starten, Sellerie Arbeiter

In Sellerie, gibt es eine einfache Möglichkeit zum erstellen einer (Reihe von) Aufgabe(N), dass ich verwenden könnte, um automatisch neu starten, ein Arbeiter?

Ziel ist, meinen Bereitstellung automatisch neu starten, werden alle untergeordneten Sellerie Arbeiter jedes mal, es wird ein neues source von github. So konnte ich dann senden Sie eine restartWorkers ( - ) Aufgabe meiner management-Sellerie-Instanz auf der Maschine töten würde (eigentlich stopwait) alle Sellerie-worker-Prozesse auf dem Computer, und starten Sie mit den neuen Modulen.

Ist der plan für jede Maschine zu haben:

  • Management-Knoten [- Warteschlangen: Management,-Maschine, - spezifisch] - Verantwortlich für die Verwaltung der rest der Arbeiter an der Maschine, indem neue Knoten und töten die alten, wie notwendig
  • Worker-Knoten [- Warteschlangen: git-revisions-spezifischen, Arbeiter bestimmte Maschine spezifisch] - Tatsächlich die Verantwortung für die Arbeit.

Sieht es aus wie der code, den ich brauche, ist irgendwo in dist_packages/celery/bin/celeryd_multi.py aber die Quelle ist ziemlich undurchsichtig für Arbeitnehmer ab, und ich kann nicht sagen, wie es funktionieren sollte oder wo es eigentlich starten die Knoten. (Es sieht aus wie shutdown_nodes ist der richtige code um den Aufruf zum töten der Prozesse, und ich bin langsam debugging meinen Weg durch es, herauszufinden, was meine Argumente sein sollte)

Gibt es eine Funktion/Funktionen restart_nodes(self, Knoten) irgendwo, dass ich anrufen könnte, oder gehe ich zu shell-Skripts in python?

/Auch gibt es eine einfachere Möglichkeit, um neu zu laden der Quelle in die Python als töten und Neustarten der Prozesse? Wenn ich wüsste, dass ein Neuladen der module tatsächlich geleisteten(Experimente sagen, dass es nicht. Änderungen an Funktionen nicht versickern, bis ich den Prozess starten), würde ich nur tun, anstatt den Umweg mit der management-Knoten.

BEARBEITEN:
Ich kann jetzt Herunterfahren, Dank broadcast(Danke mihael. Wenn ich mehr rep, würde ich upvote). Jeder Weg, um broadcast-ein Neustart? Es gibt pool_restart, aber nicht töten den Knoten, was bedeutet, dass es nicht update-Quelle.

Habe ich in einige der hinter den kulissen Quelle in Sellerie.bin.celeryd:WorkerCommand().run(), aber es gibt einige seltsame Dinge vor und nach dem laufen nennen, so kann ich nicht einfach anrufen, die Funktion und getan werden, weil es abstürzt. Es macht einfach 0 Sinn zu rufen, einen shell-Befehl aus einem python-Skript ausgeführt wird, eine andere python-Skript, und ich kann nicht glauben, dass ich bin der erste, der dies tun wollen.

  • "Es gibt pool_restart, aber nicht töten den Knoten, was bedeutet, dass es nicht update-Quelle." - wirklich wünschte, Sie hätten eine Lösung für dieses, aber es sieht aus wie es ungelöst blieb hier.
  • wie Sie Räude, die Ihre Mitarbeiter ? sind Sie mit systemd? Sie können eine execRestart Aufgaben und Aufruf systemctl restart Sellerie.service zum Beispiel am Ende der Bereitstellung
  • Das Unternehmen ging vor 4 Jahren, also es ist jetzt nicht wichtig und ich vergesse.
InformationsquelleAutor Kevin Meyer | 2013-01-21
Schreibe einen Kommentar