3
我嘗試使用多處理記錄,並發現在Windows下,我會在子進程中得到不同的根記錄器,但在Linux下,這是確定的。python與多處理日誌記錄,根記錄器在Windows中不同
測試代碼:
main.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:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import logging
logger = logging.getLogger()
# print 'in global func: ', logger
def func():
print 'in func: ', logger
在Linux下,其結果是:
in main: <logging.RootLogger object at 0x10e4d6d90>
in func: <logging.RootLogger object at 0x10e4d6d90>
但是下Windows 7,64位,我會變得不同主FUNC之間根記錄:
in main: <logging.RootLogger object at 0x00000000021FFD68>
in func: <logging.RootLogger object at 0x00000000023BC898>
,如果我在初始化腳本主要根記錄器,我怎麼能保持設置,例如Windows下的子進程的水平?
謝謝,我認爲這是真正的原因,我看到了另一個類似的答案http://stackoverflow.com/a/14643726/1276501。順便說一句,「QueueHandler」似乎只存在於python 3.x中 –