一种解决方案是使用logging模块。
记录器在multiprocessing.util中是可争议的,可用于生成线程安全日志:import time
import logging
import multiprocessing as mp
import multiprocessing.util as util
from sys import stdout as out
def runner(ids):
log = util.get_logger()
for i in range(10):
time.sleep(.5)
log.log(25, 'Process {} logging {}'.format(ids, i))
if __name__ == '__main__':
# Setup the logger
log = util.get_logger()
log.getEffectiveLevel()
# You can setup a file instead of stdout in the StreamHandler
ch = logging.StreamHandler(out)
ch.setLevel(25)
ch.setFormatter(logging.Formatter('%(processName)s - %(message)s'))
log.addHandler(ch)
log.setLevel(25)
p1 = mp.Process(target=runner, args=(1,), name="Process1")
p2 = mp.Process(target=runner, args=(2,), name="Process2")
p1.start()
p2.start()
time.sleep(2)
log.log(25, 'Some main process logging meanwhile')
p1.join()
>;20级允许避免从启动和停止进程中获取日志。
如果参数out是打开的可写文件,则处理程序可以直接登录文件。
这避免了必须自己处理日志队列。{a1}还有很多高级功能。在
使用multiprocessing模块中的记录器获取线程安全日志非常重要。在