批量并行调用Python函数时多日志文件创建不全问题
多进程并行调用日志文件创建不全的解决方案
问题原因
logging.basicConfig是全局配置方法,多进程并行运行时,多个进程同时修改logging的全局状态会引发资源竞争,导致部分进程的日志配置无法生效,日志文件创建失败。- 调用
logging.shutdown()会关闭所有全局日志处理器,后续进程复用logging资源时可能出现异常。
修正代码
使用独立的Logger实例替代全局logging模块,每个进程维护自己的日志处理器:
import logging def processDocument(inputfilename): # 创建唯一命名的Logger实例,避免全局冲突 logger = logging.getLogger(inputfilename) logger.setLevel(logging.INFO) # 避免同一进程内重复添加处理器 if not logger.handlers: logfile = inputfilename + '.log' # 创建文件处理器并配置格式 file_handler = logging.FileHandler(logfile, encoding='utf-8') formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s') file_handler.setFormatter(formatter) logger.addHandler(file_handler) # 执行业务操作 logger.info(f"process completed for file: {inputfilename}") # 清理当前进程的日志资源 for handler in logger.handlers[:]: handler.close() logger.removeHandler(handler)
关键注意事项
- 用**唯一标识(如输入文件名)**作为Logger名称,确保每个进程的Logger实例独立,互不干扰。
- 检查Logger是否已有处理器,避免同一进程内多次调用函数时重复写入日志。
- 显式关闭并移除处理器,及时释放文件资源,减少进程间的文件锁竞争。
内容的提问来源于stack exchange,提问作者Sweety
相关产品推荐
相关产品推荐

