【发布时间】:2011-04-07 02:52:48
【问题描述】:
我正在使用 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) 是默认图形大小,因此在两种情况下都会生成相同的图像。我想从我的数值数据中制作不同大小的图,而不会用完 ram。我如何强制 python 释放这个内存?
我试过gc.collect()每个循环强制垃圾回收,我试过f = gcf()获取当前数字,然后del f删除它,但无济于事。
我在 64 位 Ubuntu 10.04 上运行 CPython 2.6.5。
【问题讨论】:
标签: python memory-management matplotlib