当前位置: 代码网 > it编程>前端脚本>Python > Python文件多线程/多进程机制详解

Python文件多线程/多进程机制详解

2026年01月17日 Python 我要评论
python 文件本身不会自动创建多个线程,但如果代码或依赖的库用了多线程/多进程机制,它就会在运行时自动创建多个线程。一、正常情况下(没有主动开线程)def foo(): print("hel

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/ovs 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 调试模式✅ 会调试器自己也会开辅助线程

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com