如何为子进程启用日志记录



下面是一个简单的脚本:

import logging
import multiprocessing

def run(i):
logging.info(i)
if __name__ == '__main__':
logging.basicConfig(level=logging.INFO)
pool = multiprocessing.Pool(processes=2)
logging.info('Sequential:')
for i in range(3):
run(i)
logging.info('Parallel:')
for i in range(3):
pool.apply_async(run, [i])
logging.info('Done')
pool.close()
pool.join()

输出如下:

INFO:root:Sequential:
INFO:root:0
INFO:root:1
INFO:root:2
INFO:root:Parallel:
INFO:root:Done

为什么子进程不输出任何内容?如何解决?

有很多复杂的教程。有没有更简单的方法来登录stdout/stderr?

似乎multiprocessing_logging模块在Windows上不起作用。所以我不能使用它。

即使没有multiprocessing_logging模块也可以正常工作。应为每个子进程配置记录器。请参阅添加到run()的第一行。这是一个完整的代码:

import logging
import multiprocessing
def run(i):
logging.basicConfig(format=logging.BASIC_FORMAT, level=logging.INFO)
logging.info(i)
if __name__ == '__main__':
logging.basicConfig(level=logging.INFO)
pool = multiprocessing.Pool(processes=2)
logging.info('Sequential:')
for i in range(3):
run(i)
logging.info('Parallel:')
for i in range(3):
pool.apply_async(run, [i])
logging.info('Done')
pool.close()
pool.join()

我想无论如何都应该使用multiprocessing_logging来应对由同时访问 stdout/stderr 引起的问题。

最新更新