我尝试了用多处理进行日志记录,发现在windows下,我会在子进程中使用不同的根日志记录程序,但在Linux下这没问题。在
测试代码:
在主.py公司名称:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import logging
import multiprocessing
from mymod import func
def m_func():
server = multiprocessing.Process(target=func, args=())
server.start()
logger = logging.getLogger()
#print 'in global main: ', logger
if __name__ == '__main__':
print 'in main: ', logger
m_func()
在mymod.py公司公司名称:
^{pr2}$在Linux下,结果是:
in main: <logging.RootLogger object at 0x10e4d6d90>
in func: <logging.RootLogger object at 0x10e4d6d90>
但在64位Windows 7下,我将在main和func之间获取不同的根记录器:
in main: <logging.RootLogger object at 0x00000000021FFD68>
in func: <logging.RootLogger object at 0x00000000023BC898>
如果我在主脚本中初始化根记录程序,如何在windows下保持子进程中的级别等设置?在
在我看来,这可能与the following platform-dependant behaviour有关:
根据您的问题,我假设这会导致一个
logging.basicConfig()
调用,该调用没有到达所有进程。解决方法是让您的子进程记录到Queue
(使用QueueHandler
),并在主进程中有一个专用线程来监听队列。在相关问题 更多 >
编程相关推荐