讲师中心 微信公众号
AI工具推荐 视频效率加速

Python多线程并发执行_Python多线程并发编程实现方法

风涛吖_4679

风涛吖_4679

发布时间:2026-01-21 19:56:31

|

386人浏览过

|

来源于php中文网

原创

Python多线程仅适用于I/O密集型任务,CPU密集型任务受GIL限制无法真正并行;应优先使用ThreadPoolExecutor而非裸Thread,并注意join、异常处理、锁及threading.local的正确用法。

python多线程并发执行_python多线程并发编程实现方法

Python 的 threading 模块本身支持并发执行,但受 GIL 限制,CPU 密集型任务无法真正并行;I/O 密集型任务(如网络请求、文件读写)才适合用多线程提速。

什么时候该用 threading.Thread 直接创建线程

适用于逻辑简单、线程生命周期短、不需要统一管理返回值的场景。比如批量发 HTTP 请求、监听多个 socket 连接、定时轮询状态等。

常见错误现象:Thread 启动后主线程直接退出,子线程被强制终止 —— 忘记调用 join()。

  • 必须显式调用 t.join() 等待线程结束,否则主线程结束即整个进程退出
  • 避免在 run() 中抛出未捕获异常,否则静默失败;建议用 try/except 包裹主体逻辑
  • 共享变量需加 threading.Lock,否则出现竞态(例如多个线程同时修改一个全局计数器)

用 concurrent.futures.ThreadPoolExecutor 管理线程池更稳妥

比裸写 Thread 更适合实际项目:自动复用线程、统一异常处理、支持 map 和 submit、可设最大并发数。

立即学习“Python免费学习笔记(深入)”;

使用场景:需要并发执行同一函数多次(如下载 100 个网页)、希望控制资源消耗、需要收集所有结果或超时中断。

参数差异:max_workers 默认是 min(32, os.cpu_count() + 4),对 I/O 密集型任务可适当调高(如设为 20~50),但不是越大越好 —— 过多线程会加剧上下文切换开销。

Li Python Sec Check
Li Python Sec Check

Python 安全规范检查工具:基于 CloudBase 规范、腾讯安全指南,LLM 智能分析(默认禁用,优先本地执行)

下载

示例:

from concurrent.futures import ThreadPoolExecutor
import requests
<p>def fetch_url(url):
return len(requests.get(url).content)</p><p>urls = ["<a href="https://www.php.cn/link/5f69e19efaba426d62faeab93c308f5c">https://www.php.cn/link/5f69e19efaba426d62faeab93c308f5c</a>"] * 10
with ThreadPoolExecutor(max_workers=5) as executor:
results = list(executor.map(fetch_url, urls))

threading.local 解决线程间数据隔离问题

当每个线程需要独立副本的变量(如数据库连接、用户上下文、日志 trace_id),不能共用全局变量,也不能靠传参层层透传时,threading.local 是最轻量的方案。

容易踩的坑:local 对象属性在不同线程中互不可见,但在同一线程内跨函数有效;若误在主线程提前赋值,子线程里读不到。

  • 不要把 threading.local() 实例作为模块级全局变量后直接赋值,应在每个线程内首次访问时初始化
  • 不适用于需要在线程间传递数据的场景 —— 它的设计目标就是“隔离”,不是“通信”
  • 与 asyncio 不兼容,协程中应改用 contextvars.ContextVar

GIL 让多线程无法加速 CPU 密集型任务

这是 Python 多线程最常被误解的一点:启动 10 个线程跑纯计算(如矩阵乘法、加密解密),耗时几乎等于单线程 —— 因为 CPython 解释器只允许一个线程执行字节码。

性能影响明显:实测 sum(i*i for i in range(10**7)) 用 4 个线程并行,总耗时比单线程还长 10%~20%,主因是线程调度和 GIL 切换开销。

替代方案只有两个:

  • CPU 密集型任务 → 改用 multiprocessing(进程间内存不共享,注意序列化开销)
  • 或用 ctypes/cffi 调用 C 扩展,在 C 层释放 GIL

别指望靠增加线程数突破 GIL,那是徒劳的。真正要并发提速,先分清任务类型再说。

相关文章

编程速学教程(入门课程)
编程速学教程(入门课程)

编程怎么学习?编程怎么入门?编程在哪学?编程怎么学才快?不用担心,这里为大家提供了编程速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

相关专题

更多
全局变量怎么定义
全局变量怎么定义

本专题整合了全局变量相关内容,阅读专题下面的文章了解更多详细内容。

4045

2025.09.18

python 全局变量
python 全局变量

本专题整合了python中全局变量定义相关教程,阅读专题下面的文章了解更多详细内容。

1670

2025.09.18

c++ 全局变量
c++ 全局变量

本专题整合了c++全局变量的使用、定义、作用域等等内容,阅读专题下面的文章了解更多详细内容。

199

2026.03.17

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

3798

2023.08.10

Python 多线程与异步编程实战
Python 多线程与异步编程实战

本专题系统讲解 Python 多线程与异步编程的核心概念与实战技巧,包括 threading 模块基础、线程同步机制、GIL 原理、asyncio 异步任务管理、协程与事件循环、任务调度与异常处理。通过实战示例,帮助学习者掌握 如何构建高性能、多任务并发的 Python 应用。

1049

2025.12.24

java多线程相关教程合集
java多线程相关教程合集

本专题整合了java多线程相关教程,阅读专题下面的文章了解更多详细内容。

363

2026.01.21

C++多线程相关合集
C++多线程相关合集

本专题整合了C++多线程相关教程,阅读专题下面的的文章了解更多详细内容。

539

2026.01.21

C# 多线程与异步编程
C# 多线程与异步编程

本专题深入讲解 C# 中多线程与异步编程的核心概念与实战技巧,包括线程池管理、Task 类的使用、async/await 异步编程模式、并发控制与线程同步、死锁与竞态条件的解决方案。通过实际项目,帮助开发者掌握 如何在 C# 中构建高并发、低延迟的异步系统,提升应用性能和响应速度。

369

2026.02.06

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

80

2026.09.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn