Python 并发编程:threading、multiprocessing、asyncio 完整对比
Python并发有三个武器:threading线程、multiprocessing进程、asyncio协程。选对方案能让程序快10倍不止。
threading:I/O密集型
threading.Thread创建线程,start()启动,join()等待完成。适用于网络请求、文件读写等I/O密集型任务。I/O等待时会释放GIL,所以不受GIL限制。
multiprocessing:CPU密集型
multiprocessing.Pool创建进程池,pool.map()并行执行任务。每个进程有独立的GIL,真正利用多核CPU。适合图像处理、数值计算等CPU密集型任务。
asyncio:协程
async def定义协程函数,asyncio.gather()并发执行。适合高并发网络请求(数千个并发连接),内存占用远低于线程。
GIL 影响
全局解释器锁使Python同一时刻只能有一个线程执行字节码。CPU密集型任务受GIL限制(用multiprocessing),I/O密集型任务不受影响(I/O时自动释放GIL)。
运行效果
5个网络请求:threading并发总耗时约5秒(顺序执行需要15秒)。CPU密集计算:multiprocessing 4进程并行比单进程快近4倍。
常见问题
Q1: 什么时候用multiprocessing?CPU密集型任务(图像处理、数值计算)用multiprocessing可以真正利用多核。
Q2: asyncio和threading怎么选?高并发网络请求用asyncio,简单快速原型用threading。
延伸阅读
- Python异步编程
- Python线程安全
- Python多进程通信
---
作者:小马 | 绍大技术网 shaoda.net