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

axe*_*nde 8 python memory-leaks matplotlib

我有一段代码,代码可以正常循环一次或两次,但最终会构建内存.我试图找到内存泄漏,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()`
Run Code Online (Sandbox Code Playgroud)

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

任何建议109 - 52 = 57 MiB去了吗?

我正在使用python 3.3.

wfg*_*geo 17

这里发布的内容对我来说都不起作用。就我而言,它与通过 SSH 解释器在服务器上运行有关。显然,这将使用非交互模式,并开始正常清除所有内存:

import matplotlib
matplotlib.use('Agg')
Run Code Online (Sandbox Code Playgroud)

来源:https://matplotlib.org/stable/faq/howto_faq.html#work-with-threads

  • 这个答案应该被接受。这是 matplotlib 中的一个已知错误 https://github.com/matplotlib/matplotlib/issues/20300 (6认同)
  • 就我而言,它与 SSH 无关,我在本地运行一个 Python 脚本(保存数字)。 (3认同)
  • 这将 RAM 使用量从 GB 减少到 MB。谢谢你!正如您所说,其他帖子都不适合我。 (2认同)

YOY*_* Lu 7

# Clear the current axes.
plt.cla() 
# Clear the current figure.
plt.clf() 
# Closes all the figure windows.
plt.close('all')
Run Code Online (Sandbox Code Playgroud)

希望这可以帮到你

  • 还要添加 ```import gc; gc.collect()```以确保清除内存! (3认同)

use*_*366 6

摘自此处:Matplotlib 错误导致内存泄漏。我怎样才能释放该内存?

其中有原始参考:https://www.mail-archive.com/matplotlib-users@lists.sourceforge.net/msg11809.html

要获得斧头和图形,请执行以下操作:

代替:

import matplotlib.pyplot as plt
fig,ax = plt.subplots(1)
Run Code Online (Sandbox Code Playgroud)

使用:

from matplotlib import figure
fig = figure.Figure()
ax = fig.subplots(1)
Run Code Online (Sandbox Code Playgroud)

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