Heim  >  Artikel  >  Backend-Entwicklung  >  Wie gehandhabt man die Protokollierung in Multiprocessing-Python-Anwendungen?

Wie gehandhabt man die Protokollierung in Multiprocessing-Python-Anwendungen?

DDD
DDDOriginal
2024-10-28 02:10:31770Durchsuche

How to Handle Logging in Multiprocessing Python Applications?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn