在Spyder IDE中发布matplotlib内存

时间:2015-11-22 19:09:24

标签: python matplotlib spyder

如果我运行以下代码

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终端时?

1 个答案:

答案 0 :(得分:1)

我在绘制1000个地块时遇到了类似的问题。 在关闭图之前,我使用了命令plt.show()。然后我用plt.close()和垃圾收集等... 这大大减少了内存泄漏。 虽然我不知道确切的原因,但我找到了plt.show()来处理内存问题。