PyCharm运行TensorFlow模型随机报exit code134及tkinter线程错误如何解决
解决方案
根因说明
该报错与TensorFlow/Keras无关,是TkAgg后端的matplotlib绘图窗口被GC回收时,tkinter主事件循环已退出主线程导致的资源回收失败。你原代码未主动控制绘图窗口生命周期,主线程跑完绘图逻辑后直接执行后续模型代码,窗口被异步销毁时就会触发该错误。
方案1:切换为非GUI后端(优先推荐)
不需要弹出独立绘图窗口的情况下,直接将matplotlib后端切换为无GUI的Agg,完全规避tkinter线程问题,修改代码中的后端配置即可:
import matplotlib matplotlib.use('Agg') # 替换原有的TkAgg配置 from matplotlib import pyplot as plt
需要保存图片直接调用plt.savefig(保存路径)即可,不会弹出窗口也不会触发报错。
方案2:保留Tk交互窗口的修复方法
如果确实需要弹出窗口手动查看绘图结果,修改绘图代码主动管理窗口生命周期:
- 删除原代码中多余的
plt.axes()调用,避免生成无用的axes对象导致资源泄漏 - 所有绘图逻辑结束后调用
plt.show(block=True)阻塞主线程,直到你手动关闭所有绘图窗口 - 窗口关闭后主动调用
plt.close('all')释放所有绘图资源
修改后的代码示例:
import matplotlib matplotlib.use('TkAgg') from matplotlib import pyplot as plt import numpy as np data = np.ones((256,256)) fig = plt.figure() ax = fig.add_subplot(111) temp = np.transpose(data) plt.title('title') im = ax.imshow((temp), aspect='auto') fig.colorbar(im) data2 = np.ones((256,256)) fig = plt.figure() ax = fig.add_subplot(111) temp = np.transpose(data2) plt.title('title') im = ax.imshow((temp), aspect='auto') fig.colorbar(im) # 新增以下两行控制生命周期 plt.show(block=True) plt.close('all')
方案3:PyCharm配置调整
如果上述方案仍未解决,可通过PyCharm运行配置强制指定后端:
- 打开菜单栏
Run > Edit Configurations,找到对应脚本的运行配置 - 在
Environment variables栏添加配置MPLBACKEND=Agg,无需修改代码即可全局生效 - 若使用PyCharm内置的SciView预览绘图,可直接删除代码中的
matplotlib.use('TkAgg')配置,使用PyCharm自带的后端即可避免该问题
内容的提问来源于stack exchange,提问作者Farnaz
相关产品推荐
相关产品推荐

