在当今高性能计算和网络应用开发中,Python并发编程已成为提升程序效率的关键技术。无论你是刚接触编程的新手,还是希望深入理解并发模型的开发者,本教程都将带你从零开始掌握多线程、多进程以及异步编程等核心概念。
并发编程是指程序能够同时处理多个任务的能力。注意,并发不等于并行——并发是“看起来同时进行”,而并行是“真正同时执行”。Python 提供了多种实现并发的方式,主要包括:
Python 的 threading 模块允许你创建多个线程。但由于全局解释器锁(GIL)的存在,多线程在 CPU 密集型任务中并不能真正并行,但在 I/O 密集型任务(如文件读写、网络请求)中非常有效。
import threadingimport timedef task(name): print(f"线程 {name} 开始") time.sleep(2) print(f"线程 {name} 结束")# 创建两个线程thread1 = threading.Thread(target=task, args=("A",))thread2 = threading.Thread(target=task, args=("B",))# 启动线程thread1.start()thread2.start()# 等待线程完成thread1.join()thread2.join()print("所有线程已完成") 为绕过 GIL 限制,Python 提供了 multiprocessing 模块。每个进程拥有独立的内存空间,适合 CPU 密集型任务。
import multiprocessingimport timedef cpu_task(n): total = 0 for i in range(n): total += i * i return totalif __name__ == "__main__": start = time.time() # 创建进程池 with multiprocessing.Pool(processes=2) as pool: results = pool.map(cpu_task, [1000000, 1000000]) end = time.time() print(f"结果: {results}") print(f"耗时: {end - start:.2f} 秒") 对于高并发 I/O 操作(如 Web 请求、数据库查询),asyncio 是更高效的选择。它使用单线程事件循环,通过协程(coroutine)实现非阻塞操作。
import asyncioasync def fetch_data(delay, name): print(f"开始获取 {name} 的数据...") await asyncio.sleep(delay) # 模拟网络延迟 print(f"{name} 的数据已获取") return f"Data from {name}"async def main(): # 并发执行多个异步任务 tasks = [ fetch_data(2, "API-1"), fetch_data(1, "API-2"), fetch_data(3, "API-3") ] results = await asyncio.gather(*tasks) print("所有数据获取完成:", results)# 运行异步主函数asyncio.run(main()) | 场景 | 推荐方式 |
|---|---|
| I/O 密集型(如网络请求、文件读写) | 多线程 或 异步编程 |
| CPU 密集型(如数学计算、图像处理) | 多进程 |
| 高并发 Web 服务 | 异步编程(如 FastAPI + asyncio) |
掌握 Python并发编程 是提升程序性能的重要一步。通过合理使用 多线程、多进程 和 异步编程,你可以显著优化应用的响应速度和资源利用率。初学者建议从简单的多线程示例入手,逐步过渡到更复杂的异步模型。
记住:没有“最好”的并发模型,只有“最适合”当前任务的模型。多实践、多测试,才能写出高效可靠的并发程序!
本文由主机测评网于2025-12-18发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://vpshk.cn/2025129533.html