使用matplotlib在代码中释放内存?

时间:2013-07-24 17:45:47

标签: python memory-management matplotlib

嗯,我尝试了很多东西,我几乎相信没有办法解决我的问题。 我来啦... 我正在用tkinter编写一个简单的软件,在这个软件的一部分中,我使用matplotlib和basemaps为用户提供一些地图。 问题是,在那些地图中加载了相对大量的数据,而在某些计算机中,如果用户打开许多地图,则可能会出现问题。 mu代码的一部分(关键)是:

def plota_bacia():  
    global status_shape,pontos,arq
    print status_shape 
    if status_shape == True:
    fig = pyl.figure(figsize=(12,8))
        fig.canvas.set_window_title('Bacia fornecida pelo arquivo: '+arq)
        fig.patch.set_facecolor('white')
        m = Basemap(projection='merc',llcrnrlat=-32.5,urcrnrlat=5.0,llcrnrlon=-65.0,urcrnrlon=-33.0,lat_ts=20,resolution='c')
        parallels = arange(-50.,20,0.5)
        meridians = arange(-90.,0.,0.5)
        ptos = []
        for x,y in zip(pontos[0],pontos[1]): 
            x1,y1=m(x,y)
            ptos.append((x1,y1))
        p = Polygon(ptos,facecolor='red',edgecolor='green',linewidth=1) 
        pyl.gca().add_patch(p) 

        pyl.title(arq)
        xmin,ymin = m(min(pontos[0])-0.5,min(pontos[1])-0.5)
        xmax,ymax = m(max(pontos[0])+0.5,max(pontos[1])+0.5)
        m.drawparallels(parallels,labels=[1,0,0,0],fontsize=16)
        m.drawmeridians(meridians,labels=[0,0,0,1],fontsize=16)       
        m.readshapefile(dir_shape+'Brasil/BRASIL','r')
        pyl.xlim([xmin,xmax])
        pyl.ylim([ymin,ymax])
        pyl.show()
    else:tkMessageBox.showinfo( "Gráfico da bacia","Entre com uma bacia",parent=top)

做一些测试我明白问题是python如何管理内存,例如:

from pylab import *
f = range(1,10000000,1)
plot(f)
show()
del f ; gc.collect()

如果我在第二个(“f = range(1,10000000,1)”之后放置“del f; gc.collect()”行,我发布了一些与删除变量“f”相关的空间,但是一旦我绘制了“f”,我就会把matplotlib对象连接到与“f”相关的内存部分,因此我无法释放那部分内存。 那是对的吗?我试过cla(),clf(),close(),这对我没用。 对不起,如果我做了一些愚蠢的事,我在python中编写了许多东西,但我是环境工程师,而不是程序员。 非常感谢!

1 个答案:

答案 0 :(得分:0)

pyl.show()后添加pyl.close(fig.number); del fig