1
所以我試圖在multiprocessing
上下文中使用logging
。假設我想讓每個進程寫入自己的日誌文件。這裏是我的設置:在多處理上下文中混淆Python日誌記錄模塊的行爲
# worker.py
import logging
import os
def worker(x) :
"""
Write the value of x in the log file
"""
logger = logging.getLogger(__name__)
pid = os.getpid() # get the process id
handler = logging.FileHandler(str(pid) + ".log")
logger.addHandler(handler)
logger.info("pid={pid}, x={x}".format(**locals()))
這是我main
:
import logging
import multiprocessing as mp
import worker
# logger
logger = logging.getLogger()
logger.setLevel(logging.INFO)
# handler
handler = logging.FileHandler('main.log')
logger.addHandler(handler)
#
if __name__ == '__main__' :
pool = mp.Pool(processes=2)
pool.map(worker.worker, range(5))
pool.close()
pool.join()
現在輸出的日誌文件。這是main.log
:
pid=1985, x=0
pid=1985, x=2
pid=1986, x=1
pid=1985, x=3
pid=1986, x=4
我覺得這個輸出是否正常:兩個子進程的事件傳播到根父。所以它不是對應於Logging to a single file from multiple processes的情況(是嗎?)。但現在這裏是第一子進程日誌文件:
pid=1985, x=0
pid=1985, x=2
pid=1985, x=2
pid=1985, x=3
pid=1985, x=3
pid=1985, x=3
這是第二個孩子的日誌文件:
pid=1986, x=1
pid=1986, x=4
pid=1986, x=4
它看起來像每個子進程的第一次輸入寫入日誌,兩次第二次,第三次三次等等。發生什麼事了?