Python 文件本身不会自动创建多个线程
如果代码或依赖的库用了多线程/多进程机制,它就会在运行时自动创建多个线程。

一、正常情况下(没有主动开线程)

def foo():
    print("hello")

foo()

或者即使是比较复杂的逻辑,比如深度学习推理、图像处理、文件读写,
只要没有显式地使用线程或异步
程序只运行在一个主线程(MainThread)里。
此时 VS Code 的调用堆栈中只会看到:

MainThread

二、为什么很多程序会“自动”出现多个线程

很多人第一次调试时会惊讶地看到几十个线程,其实大多数不是显式创建的,而是:

来源 举例 说明
Python 内部运行时 ThreadPoolExecutor, asyncio, multiprocessing 例如 ThreadPoolExecutor(max_workers=4) 会开 4 个线程去执行任务。
第三方库自动创建 OpenCV, PyTorch, TensorFlow, NumPy, requests 为了提升性能,这些库常在底层开线程。例如 PyTorch 的算子调用 BLAS/OpenMP 会自动并行计算。
Jupyter / VSCode 调试器自身 调试器、控制台 I/O VS Code 在调试时也会创建辅助线程用于通信、变量同步、断点管理。
GPU 或底层加速库 cuDNN、MKL、OpenBLAS 这些都是多线程实现的,Python 只是在上层调用它们。

所以:写的 Python 文件是“单线程逻辑”,
但执行时 Python 解释器 + 底层库 会自动生成多个辅助线程。

三、怎么判断线程是谁创建的?

在调试器中点开线程名称可以看到调用堆栈。
比如:

ThreadPoolExecutor-1_0
  -> torch/threadpool.py
  -> ...

Thread-208679
  -> site-packages/opencv/...

从路径就能看出是哪个库开的线程。

四、手动创建线程的常见方式

如果自己在代码里写了这些,那是主动多线程:

import threading

def worker(i):
    print(f"thread {i} running")

for i in range(5):
    t = threading.Thread(target=worker, args=(i,))
    t.start()

这时会在 VS Code 调试器里看到:

MainThread
Thread-1
Thread-2
Thread-3
...

五、小结

情况 是否会自动创建多线程 说明
普通 Python 脚本 ❌ 否 只有主线程
使用线程池、异步库 ✅ 会 用户代码开线程
使用深度学习 / OpenCV / NumPy 等库 ✅ 会 底层自动并行
VS Code 调试模式 ✅ 会 调试器自己也会开辅助线程
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐