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

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交互窗口的修复方法

如果确实需要弹出窗口手动查看绘图结果,修改绘图代码主动管理窗口生命周期:

  1. 删除原代码中多余的plt.axes()调用,避免生成无用的axes对象导致资源泄漏
  2. 所有绘图逻辑结束后调用plt.show(block=True)阻塞主线程,直到你手动关闭所有绘图窗口
  3. 窗口关闭后主动调用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 00:06:09