在第48例中,我们学习了基于生成器的“原始协程”模型(使用 yield 与 send())。
从 Python 3.5 开始,官方引入了 async / await 语法,
使协程编程更直观、更易读、更安全。
模拟一个异步网络请求场景:
通过 async 定义异步函数;
使用 await 模拟网络 IO;
同时运行多个任务,展示协程的并发特性。
import asyncioimport time# 异步任务async def fetch_data(name, delay): print(f"[{name}] 开始获取数据...") await asyncio.sleep(delay) # 模拟网络请求耗时 print(f"[{name}] 数据获取完成,用时 {delay} 秒。") return f"{name}_result"# 主协程async def main(): start = time.time() # 并发运行三个异步任务 tasks = [ fetch_data("任务A", 2), fetch_data("任务B", 3), fetch_data("任务C", 1) ] results = await asyncio.gather(*tasks) print(" 所有任务完成,结果:", results) print("总耗时:", time.time() - start, "秒")# 运行异步程序asyncio.run(main())
[任务A] 开始获取数据...[任务B] 开始获取数据...[任务C] 开始获取数据...[任务C] 数据获取完成,用时 1 秒。[任务A] 数据获取完成,用时 2 秒。[任务B] 数据获取完成,用时 3 秒。 所有任务完成,结果: ['任务A_result', '任务B_result', '任务C_result']总耗时: 3.00 秒
定义异步函数:
使用 async def 定义协程函数。
调用时不会立即执行,而是返回一个 协程对象。
await 的作用:
表明“在这里暂停等待另一个协程完成”,
让出控制权,让事件循环(Event Loop)去运行其他任务。
并发调度:
asyncio.gather() 用于并发运行多个协程,
类似于 Promise.all()(在 JavaScript 中)。
主任务 main() ├── fetch_data("任务A", 2) ├── fetch_data("任务B", 3) └── fetch_data("任务C", 1) 并发执行 → 等待最慢任务完成 → 汇总结果
注意:协程是并发而非并行(仍在单线程内切换)。
当某个任务 await 等待 IO 时,事件循环会自动切换到其他任务。
同步版本(串行执行)
import timedef fetch_data(name, delay): print(f"[{name}] 开始获取数据...") time.sleep(delay) print(f"[{name}] 数据获取完成,用时 {delay} 秒。") start = time.time() fetch_data("任务A", 2) fetch_data("任务B", 3) fetch_data("任务C", 1) print("总耗时:", time.time() - start, "秒")
输出:
总耗时: 6 秒
异步版本:
总耗时: 3 秒
节省了一半时间。
异步协程在现代 Python 开发中广泛使用,尤其在:
网络编程(HTTP 请求、WebSocket)
爬虫框架(如 aiohttp、Scrapy)
高并发 API 服务(如 FastAPI、Sanic)
实时系统(消息队列、聊天系统)
特性 | 说明 |
async def | 定义一个异步函数(协程) |
await | 暂停执行并等待另一个协程 |
asyncio.run() | 启动事件循环 |
asyncio.gather() | 并发执行多个任务 |
✅ 优点:
高效、节省线程资源;
更容易控制任务间的并发;
是现代 Python 异步编程的核心。
winserver2016/2019永久激活密钥秘钥windows激活码序列号产品
逃生2 steam Outlast 2 逃生2激活码 恐怖动作 逃生冒险独立 单人生存游戏 PC中文正版 国区全球激活码 CDKey
夜族崛起PC中文正版steam 吸血鬼崛起V Rising 国区cdkey 激活码 德古拉的遗物dlc 创始人礼包:最古老的血统
PC中文正版steam游戏 State of Decay 2: Juggernaut Edition 腐烂国度2巨霸版 主宰版国区激活码CDK
PC正版steam游戏 Dying Light 消逝的光芒1 信徒加强版 决定版 消失的光芒 国区激活码
PC中文正版Steam 审判之眼:死神的遗言 Remastered 悬疑推理 逻辑剧情游戏 国区激活码CDKEY