ConcurrentRotatingFileHandler python在Windows下的多线程日志问题

173 阅读1分钟

python项目debug出现 PermissionError: [WinError 32] 另一个程序正在使用此文件,进程无法访问

1. 原因分析:Python中的logging模块自带的一些handlers,在使用多线程的情况在,部署在windows系统时,会报"另一个程序正在使用此文件,进程无法访问。"的错误

2. 解决方案:引入 concurrent-log-handler 中的 ConcurrentRotatingFileHandler

pip install concurrent-log-handler

3. ConcurrentRotatingFileHandler解读

  1. 日志文件轮转

    • 该处理器支持按文件大小或时间间隔进行日志文件的轮转(即当日志文件达到指定大小或时间点时,自动创建新的日志文件)。
    • 支持保留一定数量的旧日志文件,并自动删除超过指定数量的文件,避免磁盘空间占用过多。
  2. 并发写入支持

    • 传统的 RotatingFileHandler 在多线程或多进程环境下存在竞争问题,ConcurrentRotatingFileHandler 通过文件锁(File Lock)机制,解决了多线程/多进程同时写入日志导致的文件冲突问题。
  3. 适用场景

    • 适用于需要生成大量日志的多线程、多进程应用程序,例如 Web 服务、后台任务等。
    • 特别适用于分布式系统中的日志记录需求。
  4. 库依赖与使用

    • 它是 concurrent-log-handler 库的一部分,可以通过 pip install concurrent-log-handler 安装。
    • 使用方式与标准库的 RotatingFileHandler 类似,简单易用,且无缝兼容 Python 的 logging 模块。

4. 修复方案

20250728-154010.jpg