Python 异步编程与协程实战
为什么要用异步编程
在处理大量 I/O 密集型任务时,传统同步阻塞会浪费 CPU 资源。异步编程允许程序在等待网络请求或文件读写时继续执行其他逻辑,从而显著提升并发效率。
核心优势:
- 高吞吐量:单线程即可处理成千上万个并发连接。
- 低资源消耗:避免了多线程上下文切换的开销。
- 代码简洁:通过协程和事件循环,逻辑更线性,易于维护。
典型应用场景包括 HTTP 服务、WebSocket 通信、数据库查询以及大文件流式处理。
协程基础
协程(Coroutine)是轻量级的用户态线程,支持暂停和恢复。在 Python 中,使用 async def 定义协程函数,内部通过 await 挂起执行。
import asyncio
# 定义一个协程
async def hello():
print('Hello, World!')
await asyncio.sleep(1) # 模拟耗时操作
print('Hello again!')
# 启动协程
if __name__ == '__main__':
asyncio.run(hello())
注意,asyncio.run() 是 Python 3.7+ 引入的便捷入口,它会自动创建并管理事件循环。
并发执行多个协程
当需要同时运行多个任务时,可以使用 asyncio.gather() 收集结果。
import asyncio
async def count(label):
print(f'{label} Counting...')
await asyncio.sleep(1)
print(f' Counted!')
():
asyncio.gather(count(), count(), count())
__name__ == :
asyncio.run(main())


