Frage

Ich habe die Wartung einiger wissenschaftlicher Berechnungen mit Parallel Python auf einem Cluster übernommen.Mit Parallel Python werden Jobs an einen Ppserver gesendet, der (in diesem Fall) mit bereits laufenden Ppserver-Prozessen auf anderen Computern kommuniziert und Aufgaben an Ppworker-Prozesse verteilt.

Ich möchte das Protokollierungsmodul der Standardbibliothek verwenden, um Fehler und Debugging-Informationen von den Funktionen zu protokollieren, die an einen PP-Server übermittelt werden.Da diese PPWorker als separate Prozesse (auf separaten Computern) ausgeführt werden, bin ich mir nicht sicher, wie ich die Protokollierung richtig strukturieren soll.Muss ich mich für jeden Prozess in einer separaten Datei anmelden?Vielleicht gibt es einen Protokollhandler, der alles besser machen würde?

Außerdem möchte ich Berichte darüber, bei welchem ​​Prozess auf welchem ​​Computer ein Fehler aufgetreten ist, aber der Code, den ich für die Anmeldung schreibe, ist sich dieser Dinge wahrscheinlich nicht bewusst.Vielleicht sollte das auf PPServer-Ebene passieren?

(Version der Frage, die in den Parallel Python-Foren gekreuzt wurde. Ich werde hier eine Antwort posten, wenn ich dort etwas von einem Nicht-SO-Benutzer dazu erhalte.)

War es hilfreich?

Lösung

Eine Möglichkeit, Ihr Problem zu lösen, besteht darin, Folgendes zu tun:

  1. Verwenden Sie in jedem Arbeitsprozess a logging.handlers.SocketHandler um Ereignisse vom Worker an einen dedizierten Logger-Prozess zu senden.
  2. Erstellen Sie einen dedizierten Logger-Prozess, der auf Protokollierungsereignisse an einem Socket lauscht, basierend auf dem Arbeitsbeispiel in den Dokumenten unter https://docs.python.org/3/howto/logging-cookbook.html#sending-and-receiving-logging-events-across-a-network
  3. Gewinn ;-)

Wenn Sie Ausnahmen in Ihren Worker-Funktionen abfangen und protokollieren, sollten Sie in der Lage sein, Fehler aller Worker an einem Ort sichtbar zu machen.

Andere Tipps

Ich würde Pythons verwenden logging Und socket APIs.Folgen Sie einfach dem Beispiel Hier.

Starten Sie einfach ein ppworker gewidmet der Protokollierung irgendwo, und erstellen Sie eine neue logging.Logger in jedem der anderen Arbeiter mit a logging.SocketHandler Geben Sie den Hostnamen und den Port des Computers an, auf dem die Protokollierung ausgeführt wird ppworker.

Wenn bei Ihnen ein Syslog-Server läuft, können Sie auch Pythons verwenden syslog Modul, das dokumentiert ist Hier.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top