2011-05-17 21 views
4

我创建了许多使用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中观察到的情况来看,它实际上是为每个图创建多个句柄。

+0

无论它值什么,我都无法在linux上重现行为...'lsof' reports 97打开文件句柄该过程,并且在运行时不会改变。 (当然,这并不意味着它不会在Windows上损坏!)您可能希望提交错误报告和/或在邮件列表中询问。 – 2011-05-17 17:33:53

+1

有趣的是,我尝试了另一台带有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

回答

2

有几个未决引入请求来解决这个问题,其中之一将它做成Matplotlib V1.1.1(下一个稳定版本):见两个备选方案#795#798,并参与#791这是v1.1.1发布候选测试的主题。

7个月前,在git master分支上应用了一个类似于#795中提出的修复方法,因此如果您使用该方法,则不应再看到此问题。唯一需要注意的是它使用了with语句,所以在Python上无法工作2.6