内核卡在 in[*] 不一定真卡死,需先看右上角状态图标:实心圆(●)表示忙,空心圆(○)表示空闲但无响应;若持续实心超30秒且终端报kernel died等错误才确认异常。

内核卡在 In[*] 是不是真卡了?先看状态再动手
不是所有 In[*] 都代表出错,它只说明内核正在执行——可能真在算,也可能已死锁。关键看右上角内核状态图标:实心圆(●)是“忙”,空心圆(○)是“空闲但没响应”。如果图标一直是实心圆,且超过 30 秒没变化,再结合终端日志里有没有 Kernel died、MemoryError 或 Timeout waiting for iopub 这类报错,才能确认是异常卡死。
常见真实卡死原因和对应操作
多数情况不是代码慢,而是环境或资源层面出了问题:
-
ipykernel版本不兼容:尤其在升级过 Python 或 Jupyter 后,旧版ipykernel可能无法正确响应消息。运行pip install --upgrade ipykernel,然后重启内核(Kernel → Restart),不是刷新页面 - 路径含中文或空格:Windows 下用户目录名带中文(如
C:\Users\张三\)会导致内核启动失败或静默挂起。验证方式:终端里用jupyter notebook --no-browser --port=8889启动,观察是否报UnicodeDecodeError;解决办法是改用英文路径启动,或新建纯英文用户名 - 内存耗尽:加载大文件(如 >500MB 的 CSV 或嵌套 JSON)、未释放的
plt.show()图形缓存、或 pandas 全量读取都会吃光内存。打开任务管理器看 Python 进程内存占用是否持续上涨并逼近上限 - 后台进程阻塞:比如某个单元格调用了
input()、time.sleep(3600),或等待外部服务响应但超时未设。这类卡死不会报错,只会一直等
快速自救三步法
别急着重装,按顺序试这三步,80% 场景能立刻恢复:
- 点菜单 Kernel → Interrupt:强制中断当前执行,比重启轻量,适合疑似阻塞但内核还活着的情况
- 接着点 Kernel → Restart:清掉所有变量和状态,比关浏览器再开更可靠;注意:这会丢失所有未保存的变量值
- 最后执行
%reset -f(在新单元格里运行):清除命名空间,避免残留对象拖慢后续执行;配合del variable_name手动删大对象效果更好
容易被忽略的隐藏坑
真正难排查的卡顿往往藏在细节里:
- 浏览器扩展干扰:特别是广告屏蔽类(uBlock Origin)、代码高亮插件(如 Octotree),有时会劫持 Jupyter 的 WebSocket 连接,导致内核状态不同步。可尝试无痕模式打开
- PDF/Markdown 渲染卡住:某些 Markdown 单元格含大量数学公式(
$$...$$)或嵌入 iframe,浏览器渲染线程会被拖住,表现为In[*]不变但内核实际空闲。临时把该单元格切到Raw NBConvert模式再运行其他单元格验证 - conda 环境混用:用
conda activate myenv激活环境后,却用系统 pip 安装包,导致ipykernel注册到错误位置。检查jupyter kernelspec list输出的路径是否指向你的目标环境
卡在 In[*] 本身不危险,但反复出现大概率说明环境配置有隐性冲突,或者某段代码存在资源泄漏。与其等它卡住再救,不如在写大操作前加 import gc; gc.collect() 和内存监控逻辑。











