【多进程日志回滚失败】subprocess,子进程拷贝了主进程的文件描述符,导致主进程回滚日志失败
澳门博彩导航网址
澳门博彩导航网址
当前位置 : 澳门博彩导航网址 > 澳门博彩导航网址大全

【多进程日志回滚失败】subprocess,子进程拷贝了主进程的文件描述符,导致主进程回滚日志失败

  1. 问题描述

    主进程使用subprocess启动一个进程, 主进程的文件描述符同样拷贝到了子进程,subprocess带的close_fds参数已经设置为True, 没有效果,这样导致了主进程就没办法重命名这个文件描述符了,因此引起了下面的问题:
  2. 代码环境以及原因分析

    多进程日志回滚失败,报Error 32错误:
        系统环境:windows10 python。
        代码逻辑:主进程和子进程都是使用logging模块的时间回滚handler,
                 主进程使用subprocess启动子进程,主进程和子进程使用不同的文件名记录日志并回滚
        大致原因:主进程启动子进程后,主进程的日志文件描述符被子进程占用,主进程切割不了,
                 所以一直报Error 32。subprocess的close_fds设置为True貌似没有效果,仍然报错
                 
  3. 谷歌了很多方案,解决失败

    没有一个说明子进程占用父进程的日志文件描述符如何回滚的解决办法,
    基本都是多进程写一个日志文件的问题

自己来解答以下,使用了一种方法,在主进程和子进程启动时关闭对方的日志handler:

log = logging.getLoggerconfig.CTRL_LOGGER_NAME
for handler in log.handlers:
    handler.flush
    handler.close
    log.removeHandlerhandler

这个问题可能是subprocess的bug引起,subprocess提供了close_fds参数却没有生效

广告位

澳门博彩导航网址