Python 并发编程入门:threading、multiprocessing 与 asyncio 的选型思路

举报
yd_221252513 发表于 2026/10/28 23:53:18 2026/10/28
【摘要】 从 GIL 的现实出发,把 Python 三种并发方案的适用场景、代价与选型法则讲清楚:等外部用 asyncio 或线程,算内部用进程。动手前先分清瓶颈在“等”还是在“算”,选型基本就唯一了。

为什么并发选型值得单独讲

很多初学者写并发代码的第一反应是“多开线程”,但 Python 的并发模型和其他语言不太一样:GIL(全局解释器锁)让同一时刻只有一个线程在执行字节码。选型错了,代码非但不会变快,还可能更慢、更难维护。这篇短文把最常用的三种并发方案按“任务类型”梳理一遍,帮助你在动手之前就选对方向。

三种方案各自的适用场景

threading(多线程):适合 I/O 密集型任务,比如批量请求接口、下载文件、读写数据库。线程在等待网络或磁盘时会把 GIL 让出来,因此这种“顺风等待”是可以叠加的。代价是要处理线程安全:共享数据要么加锁保护,要么改用队列通信。

multiprocessing(多进程):适合 CPU 密集型任务,比如图片处理、批量计算、数据清洗。每个进程拥有独立的解释器和内存空间,可以真正利用多核。代价是进程启动成本高、跨进程通信需要序列化,给子进程传大对象时要格外小心。

asyncio(协程):同样面向 I/O 密集型场景,但用单线程事件循环换来了极低的并发成本,成百上千个并发连接也不在话下,适合高并发网络服务和批量调度型爬虫。代价是必须停留在 async/await 生态里,一旦混入某个阻塞调用,整个事件循环都会被拖住。

一句话选型法则

  • 瓶颈在“等外部”(网络、磁盘)→ 优先 asyncio,推荐用 threading 做后备;
  • 瓶颈在“算内部”(CPU 计算)→ 直接 multiprocessing;
  • 网络 I/O 且并发量非常大 → asyncio;
  • 要复用现成的同步库、希望改动最小 → threading。

一个容易踩的坑

把 CPU 密集任务塞进多线程,测速后往往比串行还慢,原因正是 GIL:线程之间频繁切换,只增加了调度开销,没有换来并行计算。反过来,把一次性的网络请求放进多进程,启动十个解释器的时间可能比下载本身还长。动手前先问一句:我的瓶颈是在“等”,还是在“算”?这个问题想清楚,方案基本就唯一了。

小结

并发不是银弹。先看任务类型,再看并发规模,最后看生态兼容性——三步想清楚,选型不再靠猜。希望这篇入门短文能帮你避开最常见的两类弯路:算力白费和调度空转。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。