当前位置: 首页 > news >正文

Python 多线程完整入门

Python 多线程完整入门

一、核心特点

  1. Python 多线程受 GIL 全局解释器锁限制同一时刻只有1个线程执行 CPU 任务
  2. 适合:IO密集型(网络请求、文件读写、等待接口、爬虫)
  3. 不适合:CPU密集型(计算密集用多进程)
  4. 模块:内置 threading_thread(低级)

二、两种创建线程方式

方式1:函数式(最常用)

import threading
import timedef task(name, delay):print(f"线程 {name} 启动,延迟 {delay}s 执行")time.sleep(delay)print(f"线程 {name} 执行完毕")if __name__ == "__main__":t1 = threading.Thread(target=task, args=("A", 2))t2 = threading.Thread(target=task, args=("B", 1))# 启动线程t1.start()t2.start()# 等待线程结束t1.join()t2.join()print("所有线程结束")

方式2:继承类

import threading
import timeclass MyThread(threading.Thread):def __init__(self, name, delay):super().__init__()self.name = nameself.delay = delaydef run(self):print(f"线程 {self.name} 启动")time.sleep(self.delay)print(f"线程 {self.name} 结束")if __name__ == "__main__":t1 = MyThread("A", 2)t2 = MyThread("B", 1)t1.start()t2.start()t1.join()t2.join()

三、守护线程 daemon

  • 守护线程:主线程退出,守护线程直接强制结束,不等待
  • 非守护线程(默认):主线程会等所有子线程跑完
t = threading.Thread(target=task, args=("A", 2), daemon=True)

四、线程安全:锁 Lock

多线程共享全局变量会资源竞争、数据错乱,用锁解决:

import threadingnum = 0
lock = threading.Lock()def add():global numfor _ in range(100000):lock.acquire()  # 加锁try:num += 1finally:lock.release()  # 释放锁if __name__ == "__main__":t1 = threading.Thread(target=add)t2 = threading.Thread(target=add)t1.start()t2.start()t1.join()t2.join()print(num)

五、线程池 ThreadPoolExecutor(推荐)

不用手动管理线程,自动复用,适合批量任务

from concurrent.futures import ThreadPoolExecutor
import timedef task(idx):print(f"任务 {idx} 开始")time.sleep(1)return f"任务 {idx} 完成"if __name__ == "__main__":# 最大5个线程并发with ThreadPoolExecutor(max_workers=5) as executor:# 提交10个任务tasks = [executor.submit(task, i) for i in range(10)]# 获取结果for res in tasks:print(res.result())

六、多线程 vs 多进程

类型 适用场景 GIL 开销 共享数据
多线程 IO密集 有GIL,串行CPU 直接共享
多进程 CPU密集 无GIL,并行 需要队列/管道

七、总结

  1. IO 多任务优先用 threading / 线程池
  2. 计算密集直接上 multiprocessing 多进程
  3. 共享变量一定要加 Lock 保证线程安全
  4. 开发优先用 ThreadPoolExecutor 更简洁稳定
http://www.jsqmd.com/news/756346/

相关文章:

  • 2026 常州黄金回收盘点,福正美口碑炸裂领跑全城 - 福正美黄金回收
  • 深度剖析:如何用开源方案驯服Joy-Con手柄的底层协议
  • 利用快马平台与Python Flask快速构建个人博客原型
  • 网盘直链下载助手:八大云盘免登录高速下载技术解析
  • 从Mixamo到二次元:如何用Umotion Pro免费版快速重定向3D动画到你的VRoid角色(附避坑指南)
  • 上海大学考研辅导班推荐:排名深度评测与选哪家分析 - michalwang
  • 3步让小爱音箱秒变AI语音助手:MiGPT实战指南
  • 终端密码管理实战:pass-cli与OpenClaw技能构建自动化安全流程
  • 别再傻傻分不清了!嵌入式开发中串口、TTL、RS-232到底怎么连?一个USB转接板搞定所有
  • 求推荐靠谱的航空物流专业公司 - myqiye
  • ARM SME指令集:矩阵运算优化与实战技巧
  • 三星LPCAMM内存技术解析:低功耗可插拔内存的未来
  • 从自然语言到UI:基于LLM的vibe-to-ui项目架构解析与实战
  • 2026年亲测10款免费论文降AI工具,一篇就懂怎么选! - 降AI实验室
  • ‌镇江苏一塑业有限公司:专注PPH管材制造,为化工工程提供可靠防腐解决方案 - 苏一塑业13914572689
  • Clawd on Desk:实时可视化AI编码助手工作状态的桌面宠物应用
  • 深度解析tensafe/tsplay镜像:Docker容器化音视频播放与DRM集成实战
  • 基于MCP协议为LLM构建本地文本文件探索服务器
  • 2026年中国AI建筑智能体价格排名:费用高吗? - myqiye
  • CentOS/RHEL 7/8配置静态IPv6地址避坑指南:为什么你的地址总是‘tentative’无法激活?
  • 首都医科大学考研辅导班推荐:排名深度评测与选哪家分析 - michalwang
  • 2026国产AI多极引领,海外仅剩三短板
  • 东华大学考研辅导班推荐:排名深度评测与选哪家分析 - michalwang
  • SANGFOR AC设备密码忘了别怕!U盘与交叉线两种恢复方法实测(附12.0.12版本前后差异)
  • AI智能体开发新范式:用结构化规范驱动LLM Agent工程化实践
  • Stark Shield:微服务安全防护中间件框架的设计原理与实战应用
  • AI编程助手如何精通Jetpack Compose?compose-skill技能包实战解析
  • fmpeg音频编码组件aac(Advanced Audio Coding (AAC) encoder)学习
  • 上海科技大学考研辅导班推荐:排名深度评测与选哪家分析 - michalwang
  • 东南大学考研辅导班推荐:排名深度评测与选哪家分析 - michalwang