You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

matplotlib中plt.gca()与plt.close()调用存在内存泄漏问题求助

matplotlib 3.5.3内存泄漏原因解析

这段循环代码导致内存泄漏的核心原因在于plt.gca()和plt.close()的配合使用在matplotlib 3.5.3版本中存在资源未完全释放的问题,具体细节如下:

  • 隐式创建的资源未被彻底清理:每次调用plt.gca()时,如果当前没有活跃的Figure对象,matplotlib会自动创建一个默认Figure,并在其上生成Axes对象。而plt.close()默认仅关闭当前Figure,但该版本中,Figure、Axes关联的内部资源(比如事件回调注册、渲染缓存、全局Figure管理器中的残留引用)没有被完全解除,Python的垃圾回收机制无法回收这些对象。
  • 全局状态的残留引用:matplotlib的全局模块级状态(如_pylab_helpers.Gcf中的Figure管理器)会保留对已关闭Figure的额外强引用,导致对象无法被回收,随着循环次数增加,未释放的内存持续累积。
  • 版本缺陷:这类内存泄漏属于matplotlib 3.5.x版本的已知问题,后续3.6及以上版本通过优化Figure销毁逻辑、清理内部引用链,修复了该问题。

临时修复方案

如果暂时无法升级matplotlib,可以通过明确管理Figure和Axes的引用,强制清理资源来缓解:

import matplotlib.pyplot as plt
import time

while True:
    time.sleep(0.1)
    fig, ax = plt.subplots()
    plt.close(fig)
    # 手动删除引用,辅助垃圾回收
    del fig, ax

内容的提问来源于stack exchange,提问作者Nico Schlömer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 09:57:37