如果我运行以下代码
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import scipy.misc
import gc
def plot(i):
lena = scipy.misc.lena()
fig = plt.figure(frameon=False,figsize=(2.,2.),dpi=256)
ax = fig.add_axes([0, 0, 1, 1])
ax.axis('off')
ax.imshow(lena, cmap=plt.cm.gray)
filename = '/tmp/test_{:03d}.png'.format(i)
with open(filename, 'w') as outfile:
fig.canvas.print_png(outfile)
plt.close(fig)
del fig
gc.collect()
for i in range(100):
plot(i)
print(i)
在Spyder中(版本2.3.5.2在gentoo linux上使用python 2.7.10,IPython 3.2.1),我看到内存随着迭代次数i线性增加,直到最终我的内存耗尽。通过"在Spyder"我的意思是标记文本并按F9。但是,如果我在一个分离的IPython终端中运行它,内存消耗将保持不变。
有没有办法在使用matplotlib灌封后强制在Spyder中释放内存,特别是当输出转到文件而不是Spyder内部的IPython终端时?
答案 0 :(得分:1)
我在绘制1000个地块时遇到了类似的问题。 在关闭图之前,我使用了命令plt.show()。然后我用plt.close()和垃圾收集等... 这大大减少了内存泄漏。 虽然我不知道确切的原因,但我找到了plt.show()来处理内存问题。