gpt4 book ai didi

python - 如何关闭在Python进程中打开的FileHandler文件

转载 作者:太空宇宙 更新时间:2023-11-03 14:00:52 24 4
gpt4 key购买 nike

我在Python进程(multiprocessing.process)中使用记录器来记录。我声明一个 FileHandler 来记录到磁盘,一旦工作完成,我尝试关闭底层文件,但无法实现这一点。我真正的问题是我产生了很多进程,导致 IOError: [Errno 24] Too much open files

我用这个代码片段重现了错误(test_process.py):

import logging
import multiprocessing

class TestProcess(multiprocessing.Process):
def __init__(self):
multiprocessing.Process.__init__(self)
self.logger = logging.getLogger('test')
self.logger.setLevel(logging.INFO)
self.handler = logging.FileHandler('test.log')
self.handler.setLevel(logging.INFO)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
self.handler.setFormatter(formatter)
self.logger.addHandler(self.handler)

def run(self):
self.logger.info('hello')
self.logger.removeHandler(self.handler)
self.handler.close()

当我运行这个时:

from test_process import TestProcess
p=TestProcess()
p.start()
p.join()

您可以检查文件 test.log 是否存在事件的文件描述符。

有什么提示可以克服这种行为吗?

最佳答案

我解决了这个问题,将以下内容添加到类中:

def __del__(self):
self.logger.removeHandler(self.handler)
self.handler.close()

关于python - 如何关闭在Python进程中打开的FileHandler文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49247356/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com