Python 异步编程与协程实战指南
在现代高并发场景下,传统的同步阻塞模型往往成为性能瓶颈。Python 的异步编程通过非阻塞 I/O 操作,让程序在等待网络或磁盘响应时能继续处理其他任务,从而显著提升执行效率并降低资源消耗。
为什么需要异步编程
异步编程的核心优势在于其非阻塞特性。当程序发起一个耗时操作(如 HTTP 请求、数据库查询)时,不需要挂起整个线程等待结果,而是可以切换到其他任务。这对于 I/O 密集型应用尤为重要,比如 Web 服务器、爬虫或实时数据流处理。
常见应用场景包括:
- 网络通信:HTTP 请求、WebSocket 长连接等。
- 文件操作:大文件的读写与传输。
- 数据库交互:异步 ORM 查询。
理解协程:轻量级并发单元
协程(Coroutine)是 Python 中实现异步的基础。它比线程更轻量,由开发者控制暂停和恢复,而非操作系统调度。
定义与运行
使用 async 关键字定义协程函数,内部通过 await 挂起当前任务。运行协程通常使用 asyncio.run()。
import asyncio
async def hello():
print('Hello, World!')
await asyncio.sleep(1)
print('Hello again!')
if __name__ == '__main__':
asyncio.run(hello())
并发执行多个协程
单个协程无法利用多核 CPU,但可以通过事件循环并发调度。asyncio.gather() 是常用的批量执行工具。
import asyncio
async def count():
print('Counting...')
await asyncio.sleep(1)
print('Counted!')
async def main():
# 并发执行三个计数任务
await asyncio.gather(count(), count(), count())
if __name__ == '__main__':
asyncio.run(main())


