首頁  >  文章  >  後端開發  >  如何處理多處理 Python 應用程式中的日誌記錄?

如何處理多處理 Python 應用程式中的日誌記錄?

DDD
DDD原創
2024-10-28 02:10:31770瀏覽

How to Handle Logging in Multiprocessing Python Applications?

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn