Mac平台matplotlib绘图窗口无法彻底关闭问题求助
Mac下Matplotlib绘图后彻底关闭窗口/进程的解决方案
用非交互式后端(最省心)
要是你只是生成图片不需要显示绘图窗口,直接在导入pyplot前指定Agg后端,根本不会创建窗口,自然没残留问题:import matplotlib matplotlib.use('Agg') # 先设置后端,再导pyplot import matplotlib.pyplot as plt fig, ax = plt.subplots() ax.plot(getXData(), getYData(), label="Line 1") plt.savefig("plot.png", bbox_inches='tight') plt.clf() plt.close("all") # 后续长时间运行的代码针对Mac原生后端的强制清理
Mac默认用的是MacOSX(Cocoa)后端,偶尔会有资源残留。如果必须要显示窗口再关闭,加几步强制清理:import matplotlib.pyplot as plt fig, ax = plt.subplots() ax.plot(getXData(), getYData(), label="Line 1") plt.savefig("plot.png", bbox_inches='tight') plt.clf() plt.close("all") # 尝试销毁窗口管理器的实例 try: plt.get_current_fig_manager().window.destroy() except: pass # 彻底释放资源 plt.close('all') del fig, ax import gc gc.collect() # 后续长时间运行的代码切换到TkAgg后端
换用Tk后端避开Mac原生后端的bug,稳定性更好:import matplotlib matplotlib.use('TkAgg') import matplotlib.pyplot as plt fig, ax = plt.subplots() ax.plot(getXData(), getYData(), label="Line 1") plt.savefig("plot.png", bbox_inches='tight') plt.clf() plt.close("all") # 关闭Tk的主循环(防止残留) try: import tkinter as tk tk._default_root.destroy() except: pass # 后续长时间运行的代码
内容的提问来源于stack exchange,提问作者Prashant
相关产品推荐
相关产品推荐

