我正在使用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。