Python-Multiprocessing-Protokollierung - warum multiprocessing.get_logger

8

Ich habe schon seit geraumer Zeit mit der Protokollierung von Multiprozessen zu kämpfen, und das aus vielen Gründen.

Einer meiner Gründe ist, warum ein anderer get_logger.

Natürlich habe ich diese Frage gesehen > und es scheint, dass der Logger, den multiprocessing.get_logger zurückgibt, einige magische "process-shared locks" macht, um die Handhabung der Protokollierung zu vereinfachen.

Also, heute habe ich in den Multiprocessing-Code von Python 2.7 (/multiprocessing/util.py) geblickt und festgestellt, dass dieser Logger nur ein einfacher logging.Logger ist, und es gibt kaum Zauberei.

Hier ist die Beschreibung in Python-Dokumentation, direkt vor dem Funktion get_logger:

  

Einige Unterstützung für die Protokollierung ist verfügbar. Beachten Sie jedoch, dass die Protokollierung   Paket verwendet keine freigegebenen Sperren, so dass es möglich ist (abhängig von   auf dem Handler-Typ) für Nachrichten von verschiedenen Prozessen zu bekommen   durcheinander.

Wenn Sie also einen falschen Logging-Handler verwenden, kann sogar der Logger get_logger schief gehen? Ich habe ein Programm verwendet verwendet get_logger für die Protokollierung für einige Zeit. Es druckt Protokolle in StreamHandler und (scheint) nie durcheinander.

Jetzt ist meine Theorie:

  1. multiprocessing.get_logger führt überhaupt keine Sperren mit Prozessfreigabe durch
  2. StreamHandler funktioniert für Multiprocessing, aber FileHandler nicht
  3. Hauptziel dieses get_logger Loggers ist die Verfolgung von Prozessen ' Lebenszyklus und bieten einen leicht zu bedienenden und einsatzbereiten Logger Das protokolliert bereits den Name / ID-Typ des Prozesses

Hier ist die Frage:

Stimmt meine Theorie?

Wie / Warum / Wann verwenden Sie diesen get_logger?

    
tdihp 23.11.2012, 01:43
quelle

1 Antwort

1

Diese Antwort bezieht sich nicht unbedingt auf get_logger , aber vielleicht können Sie den in diesen Beitrag ? Beachten Sie, dass die Klassen QueueHandler / QueueListener für frühere Python-Versionen über das Paket logutils verfügbar sind (verfügbar auf PyPI auch).

    
Vinay Sajip 23.11.2012 11:33
quelle

Tags und Links