Multiprocessing-Protokollierung in Python
Bei der Verwendung des Multiprocessing-Moduls von Python ist es wichtig, Protokollierungspraktiken zu berücksichtigen, um Fehler zu vermeiden, die dadurch verursacht werden, dass mehrere Prozesse in das schreiben dasselbe Dateihandle gleichzeitig verwenden. Standardmäßig sorgt der von mp.get_logger() bereitgestellte Multiprocessing-fähige Logger für ordnungsgemäße Sperrmechanismen in sys.stderr.
Module, die nicht Multiprocessing-fähig sind, müssen jedoch möglicherweise geändert werden, um die Multiprocessing-fähige Protokollierung zu verwenden. Um diese Änderungen zu vermeiden, ziehen Sie alternative Ansätze in Betracht:
Benutzerdefinierter Protokollierungshandler
Ein Ansatz besteht darin, einen benutzerdefinierten Protokollhandler zu erstellen, der Protokolle über eine Pipe an den übergeordneten Prozess sendet. Dadurch können Module das Standardprotokollierungsmodul verwenden, während der übergeordnete Prozess die eigentliche Protokollierung übernimmt. Hier ist eine Implementierung:
<code class="python">from logging.handlers import RotatingFileHandler import multiprocessing, threading, logging, sys, traceback class MultiProcessingLog(logging.Handler): def __init__(self, name, mode, maxsize, rotate): logging.Handler.__init__(self) self._handler = RotatingFileHandler(name, mode, maxsize, rotate) self.queue = multiprocessing.Queue(-1) t = threading.Thread(target=self.receive) t.daemon = True t.start()</code>
Der Handler empfängt Protokolldatensätze von den untergeordneten Prozessen und schreibt sie mithilfe des bereitgestellten Dateihandlers in eine Datei. Dies gewährleistet eine zentrale Protokollierung, ohne dass Änderungen an abhängigen Modulen vorgenommen werden müssen.
Das obige ist der detaillierte Inhalt vonWie gehandhabt man die Protokollierung in Multiprocessing-Python-Anwendungen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!