在Python中使用多重处理时应如何记录?

在Python中使用多重处理时应如何记录?,第1张

在Python中使用多重处理时应如何记录?

现在,它使用队列来正确处理并发,并且还可以从错误中正确恢复。我现在已经在生产中使用它几个月了,下面的当前版本可以正常工作。

from logging.handlers import RotatingFileHandlerimport multiprocessing, threading, logging, sys, tracebackclass 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()    def setFormatter(self, fmt):        logging.Handler.setFormatter(self, fmt)        self._handler.setFormatter(fmt)    def receive(self):        while True: try:     record = self.queue.get()     self._handler.emit(record) except (KeyboardInterrupt, SystemExit):     raise except EOFError:     break except:     traceback.print_exc(file=sys.stderr)    def send(self, s):        self.queue.put_nowait(s)    def _format_record(self, record):        # ensure that exc_info and args        # have been stringified.  Removes any chance of        # unpickleable things inside and possibly reduces        # message size sent over the pipe        if record.args: record.msg = record.msg % record.args record.args = None        if record.exc_info: dummy = self.format(record) record.exc_info = None        return record    def emit(self, record):        try: s = self._format_record(record) self.send(s)        except (KeyboardInterrupt, SystemExit): raise        except: self.handleError(record)    def close(self):        self._handler.close()        logging.Handler.close(self)


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5640914.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-16
下一篇2022-12-16

发表评论

登录后才能评论

评论列表(0条)

    保存