Python Matplotlib不';t在savefig和close()之后释放内存
我有一段代码,可以很好地循环一两次,但最终它会建立内存。我尝试使用Python Matplotlib不';t在savefig和close()之后释放内存,python,matplotlib,memory-leaks,Python,Matplotlib,Memory Leaks,我有一段代码,可以很好地循环一两次,但最终它会建立内存。我尝试使用内存\u探查器查找内存泄漏,结果如下: 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 M
内存\u探查器
查找内存泄漏,结果如下:
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.subplot()
有没有关于109-52=57 MiB去了哪里的建议
我正在使用python 3.3
# Clear the current axes.
plt.cla()
# Clear the current figure.
plt.clf()
# Closes all the figure windows.
plt.close('all')
希望这能帮助你plt.ioff()
在笔记本中为我工作过,
plt.关闭(图)
否则。清除当前轴。
plt.cla()
#清除当前数字。
plt.clf()
#关闭所有图形窗口。
plt.close(“全部”)
plt.关闭(图)
gc.collect()
这对我有用。把这些线放在循环的末尾 从这里开始:
其原始参考号为:
要获取ax和figure,请执行以下操作:
而不是:
import matplotlib.pyplot as plt
fig,ax = plt.subplots(1)
使用:
也不需要执行
plt.close()
或任何操作。这对我很有效。可能重复的,虽然这是一个解决方法,但不是这个问题的明确解决方案。这个问题更一般,可能是其中一个场景涵盖了您的案例。如果没有,请让我们了解有关用例的更多细节。感谢您的尝试,不幸的是,它工作正常,我没有在django中运行任何东西,因此这没有帮助。我可以尝试多重处理,但如上所述,只是避免了问题,并不能解决它。我正在使用子图(“fig,ax=plt.subplot()”),所以我不能从fig=plt.figure()更改为fig=figure.figure(),或者?还有其他建议吗?请在每个循环结束时尝试plt.close('all')
。适用于我的agg
后端。还可以添加importgc;gc.collect()
以确保清除内存!
from matplotlib import figure
fig = figure.Figure()
ax = fig.subplots(1)