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:
Hier ist die Frage:
Stimmt meine Theorie?
Wie / Warum / Wann verwenden Sie diesen get_logger?
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).
Tags und Links python logging multiprocessing