我创建了许多使用pylab.savefig保存的图,并观察到Python进程最终为C:\ Python27 \ Lib \ site-packages \ matplotlib \ mpl-data \ fonts \ ttf \ Vera.ttf创建了数百个文件句柄。最终这会由于太多的文件句柄而导致进程崩溃(此时,通过“Process Explorer”查看Vera.ttf有超过700个句柄)。有没有人在Windows 7上看到matplotlib泄漏文件句柄(Vera.ttf)与版本1.0.1?
我在档案中看到几处对matplotlib中的旧泄漏的引用,但据我所知,它们应该由版本1.0.1解决。
在我的代码中,我反复调用pylab.close(“all”)以及pylab.close(figure_variable)和figure_variable.clear()来试图让matplotlib释放资源。
仅供参考,我正在使用64位Windows的Enthought python分发版的最新版本。我可以像重复的问题:
for i in range(1000):
fig = pylab.figure()
pylab.plot(some_data)
fig.savefig(filename)
fig.clear()
pylab.close(fig)
if i % 10 == 1: pylab.close("all")
有谁知道怎么去matplotlib要么释放手柄上Vera.ttf或避免重新加载相同的文件这么多次?从我在Process Explorer中观察到的情况来看,它实际上是为每个图创建多个句柄。
无论它值什么,我都无法在linux上重现行为...'lsof' reports 97打开文件句柄该过程,并且在运行时不会改变。 (当然,这并不意味着它不会在Windows上损坏!)您可能希望提交错误报告和/或在邮件列表中询问。 – 2011-05-17 17:33:53
有趣的是,我尝试了另一台带有Home的Windows PC,而不是Professional,它有一个32位版本的Python 2.6,但也有matplotlib 1.0.1。在那里,我看到许多Vera.ttf副本,但数量不会持续增长,并且每个剧情似乎都会创建4-5个新句柄,但会关闭所有句柄。在Windows 7 Professional,64位Python 2.7中,相同的代码似乎创建了4-5个句柄,但只有其中的1-2个句柄(在Process Explorer的闪烁中很难说明发生了什么)才会关闭,直到它最终崩溃。 – 2011-05-17 18:03:40