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

为何VSCode中Jupyter Notebook初始运行时活跃线程数多于1

Jupyter环境下threading.active_count()返回值异常的原因

核心结论

不同环境下的返回值差异是运行时本身的常驻后台线程导致的,和测试代码逻辑无关。

额外线程的来源

Jupyter(包括VSCode内嵌的Jupyter环境)启动时不会只跑一个裸的Python解释器,而是会启动完整的IPython内核,内核默认会拉起多个常驻服务线程,观测到的额外5个线程基本属于以下几类(不同IPython、tornado版本的线程数量、命名会有小幅浮动,属于正常现象):

  • 内核控制线程:负责处理前端和内核之间的所有指令传输,包括单元格运行请求、代码补全请求、内核中断指令等
  • 心跳检测线程:定时向前端发送存活信号,避免前端误判内核假死/断开
  • Tornado异步事件循环线程:IPython内核基于tornado异步框架实现,单独启线程跑事件循环来处理并发请求,避免阻塞主线程
  • 历史记录异步写入线程:负责将单元格输入、输出内容异步写入本地历史存储文件,不会阻塞主线程代码执行
  • 运行状态监控线程:负责监控内核内存占用、定时触发垃圾回收,部分版本还会负责处理stdout/stderr流的异步转发

你可以直接运行以下代码打印所有活跃线程的名称,直观验证每个线程的存在:

import threading
for thread in threading.enumerate():
    print(thread.name)

输出里除了MainThread(主线程)之外的条目,就是内核启动的额外后台线程。

环境差异的根本原因

CMD、PyCharm运行普通.py脚本时,是直接启动原生CPython解释器进程,进程初始化阶段只会创建主线程,没有额外的常驻服务需求:脚本执行完成后解释器进程会直接退出,不需要和前端维持长连接、不需要持久化交互历史、不需要做内核状态检测,因此threading.active_count()只会返回1。
如果在PyCharm中使用Jupyter模式运行代码,同样会启动完整IPython内核,返回的线程数也会大于1,和VSCode中的表现一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 21:09:17