„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie gehandhabt man die Protokollierung in Multiprocessing-Python-Anwendungen?

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

Veröffentlicht am 08.11.2024
Durchsuche:805

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 stellt der von mp.get_logger() bereitgestellte Multiprocessing-fähige Logger ordnungsgemäße Sperrmechanismen in sys.stderr sicher.

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:

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()

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.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3