这是一个简单的脚本:
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
为什么子进程什么都不输出?如何解决?
complicated tutorials很多。有没有更简单的方法登录到stdout / stderr?
似乎multiprocessing_logging模块在Windows上不起作用。所以我不能使用它。
答案 0 :(得分:0)
即使没有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的一致访问引起的问题。