新开Python控制台调用threading.enumerate出现的额外线程是什么?
Python交互环境额外线程问题解答
额外守护线程的来源
你看到的Thread-2、Thread-3属于Python交互运行环境自带的后台守护线程,并非由你编写的代码创建,常见产生场景如下:
- 你使用的是IPython、Jupyter类增强交互终端,这类终端会启动后台线程处理命令补全、历史记录同步、内核状态检测等功能
- 你使用的是PyCharm、VSCode等IDE自带的集成Python终端,IDE会注入调试、代码补全相关的后台线程实现交互增强功能
- 部分定制化Python发行版(比如Anaconda)的默认交互环境会启动少量线程处理依赖检查、更新提示等逻辑
该现象是否正常
这是完全正常的情况,不会影响你的代码运行:
- 这类线程都带有
daemon标识,属于守护线程,生命周期和主进程绑定,你退出Python控制台时会被自动销毁,不会残留进程 - 如果你在操作系统原生的纯Python交互终端(无IDE、无增强插件,直接在命令行执行
python进入的环境)运行相同代码,通常只会返回[_MainThread(MainThread, started xxxx)]这一个主线程,可以自行验证。
终止这类线程的方案
首先不建议手动终止这类内置线程:强制终止会导致交互终端的补全、调试、历史记录等功能失效,甚至直接造成控制台崩溃。如果需要纯净的线程测试环境,可以选择以下方案:
- 将测试代码写入
.py源文件,通过python 文件名.py的方式直接运行脚本,此时执行threading.enumerate()只会返回主线程 - 切换到操作系统原生的无增强Python交互终端执行测试,不会产生额外内置线程
如果要清理当前环境的这类线程,直接关闭当前Python控制台重新打开即可,守护线程会随主进程退出自动销毁。
内容的提问来源于stack exchange,提问作者Jon
相关产品推荐
相关产品推荐

