Python 中的多處理日誌記錄
使用Python 的多處理模組日誌時,重要的是要考慮記錄實踐,以避免記錄因多個進程寫入而導致錯誤同時處理相同的檔案句柄。預設情況下,mp.get_logger() 提供的多處理感知記錄器可確保 sys.stderr 中正確的鎖定機制。
但是,不支援多處理感知的模組可能需要修改才能使用多處理感知日誌記錄。為了避免這些更改,請考慮替代方法:
自訂日誌記錄處理程序
一種方法是建立一個自訂日誌處理程序,透過管道將日誌發送到父進程。這允許模組在父進程處理實際日誌記錄時使用標準日誌記錄模組。這是一個實作:
<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>
處理程序從子程序接收日誌記錄,並使用提供的檔案處理程序將它們寫入檔案。這確保了集中日誌記錄,而無需更改依賴模組。
以上是如何處理多處理 Python 應用程式中的日誌記錄?的詳細內容。更多資訊請關注PHP中文網其他相關文章!