Python - 多处理 - 不可避免地记录每个进程



我正在使用Python 3 multiprocessing.pool和apply_async。

在每个进程中,我都会得到一个记录器,每次都会记录到不同的文件。但我看到的是日志文件包含所有进程的所有日志条目。

是否可以让每个进程仅将进程中记录的条目记录到其自己的文件中?

这是重现该问题的示例代码:

from multiprocessing import Pool
from multiprocessing.pool import ApplyResult

def test(index):
import logging
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
filename = '{}.log'.format(str(index))
file_handler = logging.FileHandler(filename)
file_handler.setLevel(logging.DEBUG)
logger.addHandler(file_handler)
logger.debug(str(index))    
return

if __name__ == '__main__':
results = []
pool = Pool(processes=1)
for i in range(10):
apply_async = pool.apply_async(test, args=(i,))
results.append(apply_async)
map(ApplyResult.wait, results)
pool.close()
pool.join()

生成的第一个日志为0.log

0
1
2
3
4
5
6
7
8
9

1.log

1
2
3
4
5
6
7
8
9

等。

您是否尝试过在getLogger方法中添加特定名称?

logger = logging.getLogger(str(index))

否则,日志记录模块将默认为根记录器。这也许可以解释为什么每个 n 个进程都会捕获 n 到 9。

相关内容

  • 没有找到相关文章

最新更新