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中文网其他相关文章!