我正在使用matplotlib生成许多数值模拟结果图。该地块被用作一个视频帧,所以我通过反复调用函数与此类似生成许多人:python matplotlib:指定图形大小时未释放内存
from pylab import *
def plot_density(filename,i,t,psi_Na):
figure(figsize=(8,6))
imshow(abs(psi_Na)**2,origin = 'lower')
savefig(filename + '_%04d.png'%i)
clf()
的问题是,蟒蛇进程的内存使用量增长由每次调用这个函数几兆字节。例如,如果我用这个循环调用它:
if __name__ == "__main__":
x = linspace(-6e-6,6e-6,128,endpoint=False)
y = linspace(-6e-6,6e-6,128,endpoint=False)
X,Y = meshgrid(x,y)
k = 1000000
omega = 200
times = linspace(0,100e-3,100,endpoint=False)
for i,t in enumerate(times):
psi_Na = sin(k*X-omega*t)
plot_density('wavefunction',i,t,psi_Na)
print i
然后内存使用量随着时间增长到600MB。但是,如果我在函数定义中注释掉figure(figsize=(8,6))
行,那么RAM的使用率保持稳定在52MB。 (8,6)
是默认的图形尺寸,因此在两种情况下都会生成相同的图像。我想从我的数字数据中制作不同大小的图表,而不会耗尽内存。我该如何强制python释放这些内存?
我试过gc.collect()
每个循环强制垃圾回收,我试过f = gcf()
得到当前数字,然后del f
删除它,但无济于事。
我在64位Ubuntu 10.04上运行CPython 2.6.5。
这就行了!非常感谢。 – 2010-09-02 03:27:54
是的,'clf'不会删除这个数字或释放它的资源,它只会清除它。和'f = gcf(); del f'只会删除刚刚创建的引用,并不会删除图形对象本身。这就是你需要“关闭”的。 (+1) – 2010-09-02 04:56:27