我正在使用 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()
问题在于,每次调用此函数时,python 进程的内存使用量都会增加几兆字节。例如,如果我用这个循环调用它:
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。