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

脚本中调用plt.show()导致Jupyter Console冻结的问题求助

解决Jupyter Console执行带plt.show()的脚本时冻结的问题

问题总结

使用run -i ./myscript.py执行包含plt.show()的脚本时,Jupyter Console冻结;移除该行后手动调用plt.show()正常,但操作繁琐。强制停止内核后会触发use_kernel_is_complete警告。

解决方案

方法1:指定非阻塞的matplotlib后端

在脚本开头添加后端配置代码,避免阻塞内核事件循环:

import matplotlib
matplotlib.use('TkAgg')  # 可选后端还有Qt5Agg、Qt6Agg等,根据系统支持选择
import numpy as np
import matplotlib.pyplot as plt 

tf = 20
f0 = 1
fs = 4*np.pi*f0
t = np.arange(0, tf, 1/fs)
fig, ax = plt.subplots()
ax.plot(t, np.sin(2*np.pi*f0*t))
plt.show()

或者在Jupyter Console中先执行魔法命令配置后端,再运行脚本:

%matplotlib tk
run -i ./myscript.py

方法2:让plt.show()非阻塞执行

修改脚本中的plt.show()为非阻塞模式,窗口弹出后不会占用内核:

plt.show(block=False)

原因说明

Jupyter Console的交互环境中,plt.show()默认启用阻塞模式,会抢占内核的事件循环,导致控制台无法响应输入。而手动调用时,内核已处于交互状态,事件循环能正常处理绘图和控制台输入的并发操作。

问题追踪(若确认为bug)

如果上述方法无法解决,可确认是否为matplotlib或Jupyter Console的兼容性问题:

  • 提交到matplotlib官方问题追踪系统
  • 提交到Jupyter Console的官方代码仓库

关于后续警告的说明

按<c-c>强制停止内核后,内核处于异常状态,无法响应is_complete_request检查,因此触发警告。解决冻结问题后,正常执行脚本不会出现该情况。

内容的提问来源于stack exchange,提问作者Barzi2001

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 23:35:06