在savefig和close()之后,Matplotlib不释放内存

时间:2015-07-01 08:45:00

标签: python matplotlib memory-leaks

我有一段代码可以正常循环一次或两次,但最终会构建内存。我尝试使用memory_profiler找到内存泄漏,这就是结果:

row_nr    Memory_usage    Memory_diff    row_text
 470     52.699 MiB     0.000 MiB      ax.axis('off')
 471     167.504 MiB    114.805 MiB    fig.savefig('figname.png', dpi=600)
 472     167.504 MiB    0.000 MiB      fig.clf()
 473     109.711 MiB    -57.793 MiB    plt.close()
 474     109.711 MiB    0.000 MiB      gc.collect()`

我创建了这样的图: fig, ax = plt.subplots()

任何有关109 - 52 = 57 MiB的建议吗?

我正在使用python 3.3。

4 个答案:

答案 0 :(得分:1)

plt.ioff()在笔记本中为我工作 plt.close(fig)否则

答案 1 :(得分:1)

        # Clear the current axes.
        plt.cla() 
        # Clear the current figure.
        plt.clf() 
        # Closes all the figure windows.
        plt.close('all')   
        plt.close(fig)
        gc.collect()

这对我有用。只需将这些行放在循环的结尾即可!

答案 2 :(得分:0)

# Clear the current axes.
plt.cla() 
# Clear the current figure.
plt.clf() 
# Closes all the figure windows.
plt.close('all')

希望这可以为您提供帮助

答案 3 :(得分:0)

取自此处:Matplotlib errors result in a memory leak. How can I free up that memory?

原始引用:https://www.mail-archive.com/matplotlib-users@lists.sourceforge.net/msg11809.html

要获得斧头和数字,请执行以下操作:

代替:

import matplotlib.pyplot as plt
fig,ax = plt.subplots(1)

使用:

from matplotlib import figure
fig = figure.Figure()
ax = fig.subplots(1)

也不需要做 plt.close() 或任何事情。它对我有用。