【多进程日志回滚失败】subprocess,子进程拷贝了主进程的文件描述符,导致主进程回滚日志失败
问题描述
主进程使用subprocess启动一个进程, 主进程的文件描述符同样拷贝到了子进程,subprocess带的close_fds参数已经设置为True, 没有效果,这样导致了主进程就没办法重命名这个文件描述符了,因此引起了下面的问题:
代码环境以及原因分析
多进程日志回滚失败,报Error 32错误: 系统环境:windows10 python。 代码逻辑:主进程和子进程都是使用logging模块的时间回滚handler, 主进程使用subprocess启动子进程,主进程和子进程使用不同的文件名记录日志并回滚 大致原因:主进程启动子进程后,主进程的日志文件描述符被子进程占用,主进程切割不了, 所以一直报Error 32。subprocess的close_fds设置为True貌似没有效果,仍然报错
谷歌了很多方案,解决失败
没有一个说明子进程占用父进程的日志文件描述符如何回滚的解决办法, 基本都是多进程写一个日志文件的问题
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
自己来解答以下,使用了一种方法,在主进程和子进程启动时关闭对方的日志handler:
这个问题可能是subprocess的bug引起,subprocess提供了close_fds参数却没有生效