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
相关产品推荐
相关产品推荐

