我有一个应用程序需要运行多个模拟操作。我想建立一个日志机制,将所有的日志记录在general.log中,并将每个模拟操作的日志单独存储到run00001.log等文件中。为此,我定义了一个Run类,在__init__()
中添加一个新的文件处理器以处理运行日志。
问题是运行操作的日志文件从未被释放,因此经过一定次数的运行后,可用句柄会耗尽并导致运行崩溃。
我设置了一些例程来测试这个问题,如下所示:
主例程
import Model
try:
myrun = Model.Run('20130315150340_run_49295')
ha = raw_input('enter')
myrun.log.info("some info")
except:
traceback.print_exc(file=sys.stdout)
ha = raw_input('enter3')
类 Run 在模块 Model 中定义如下
import logging
class Run(object):
""" Implements the functionality of a single run. """
def __init__(self, runid):
self.logdir="."
self.runid = runid
self.logFile = os.path.join(self.logdir , self.runid + '.log')
self.log = logging.getLogger('Run'+self.runid)
myformatter = logging.Formatter('%(asctime)s %(name)-12s %(levelname)-8s %(message)s')
myhandler = logging.FileHandler(self.logFile)
myhandler.setLevel(logging.INFO)
myhandler.setFormatter(myformatter)
self.log.addHandler(myhandler)
然后我使用程序进程管理器来跟踪文件处理程序。我看到运行日志出现了,但从未消失过。
有没有办法可以强制它消失?