Python asyncio 实战:从入门到高并发
发表于 : 周二 6月 16, 2026 10:04 am
2026 年 Python 异步编程进入新阶段,asyncio 在标准库层面整合了结构化并发和更轻量的事件循环。分享一些实战经验。
[b]基础概念[/b]
asyncio 三件套:
- 事件循环:管理调度所有协程
- 协程:async def 定义的特殊函数
- awaitable 对象:可被 await 的对象
[b]快速上手[/b]
[code]import asyncio
async def say_hello():
await asyncio.sleep(1)
print('Hello, asyncio!')
asyncio.run(say_hello())[/code]
[b]并发执行多个任务[/b]
[code]async def main():
tasks = [
fetch_data(url1),
fetch_data(url2),
fetch_data(url3),
]
results = await asyncio.gather(*tasks)
return results
asyncio.run(main())[/code]
[b]常见坑[/b]
1. 逐个 await 导致串行执行 — 用 gather 或 create_task
2. 在协程里调用同步阻塞 API — 用 loop.run_in_executor
3. 忘记处理异常 — gather(return_exceptions=True)
4. 事件循环嵌套 — Python 3.10+ 已改善
[b]适用场景[/b]
- 高并发网络请求(爬虫、API 网关)
- 实时数据处理
- WebSocket 服务
不适合:CPU 密集型任务(用多进程)。
有在项目中用过 asyncio 的欢迎分享踩坑经验。
[b]基础概念[/b]
asyncio 三件套:
- 事件循环:管理调度所有协程
- 协程:async def 定义的特殊函数
- awaitable 对象:可被 await 的对象
[b]快速上手[/b]
[code]import asyncio
async def say_hello():
await asyncio.sleep(1)
print('Hello, asyncio!')
asyncio.run(say_hello())[/code]
[b]并发执行多个任务[/b]
[code]async def main():
tasks = [
fetch_data(url1),
fetch_data(url2),
fetch_data(url3),
]
results = await asyncio.gather(*tasks)
return results
asyncio.run(main())[/code]
[b]常见坑[/b]
1. 逐个 await 导致串行执行 — 用 gather 或 create_task
2. 在协程里调用同步阻塞 API — 用 loop.run_in_executor
3. 忘记处理异常 — gather(return_exceptions=True)
4. 事件循环嵌套 — Python 3.10+ 已改善
[b]适用场景[/b]
- 高并发网络请求(爬虫、API 网关)
- 实时数据处理
- WebSocket 服务
不适合:CPU 密集型任务(用多进程)。
有在项目中用过 asyncio 的欢迎分享踩坑经验。