当前位置: 首页 > news >正文

【Python 异步】第二篇:async 与 await 的深度互博——协程的“呼吸”艺术

专栏进度:02 / 03 (异步 IO 专题)
如果说同步代码是“一杆子插到底”,那么异步代码就是有节奏的“呼吸”。async 定义了这段呼吸的频率,而 await 则是那次深长的“呼气”。

一、 async:将函数标记为“协程”

当你给一个函数加上 async 前缀时,它就不再是一个普通的函数了。

asyncdefsay_hello():return"Hello"result=say_hello()print(result)# <coroutine object say_hello at 0x...>

专家视角:
调用 async 函数不会立即执行内部代码,而是返回一个协程对象(Coroutine Object)。它就像一份“待办清单”,此时还没有开始执行。

二、 await:逻辑的“挂起”与“让权”

await 是异步编程中最具魔力的关键字。它的核心作用有两个:等待结果 和 让出控制权。

工作逻辑:

挂起(Suspend):当遇到 await 时,当前的协程会立刻暂停,并将自己状态(局部变量、执行进度)保存在内存中。

让权(Yield):它会告诉事件循环:“我现在要等 IO(比如网络下载),你先去处理别的任务吧。”

唤醒(Resume):当 await 后面的 IO 操作完成后,事件循环会重新跳回该协程,恢复其上下文并继续运行。

三、 深度实战:Task 与 Future 的协同

在实际开发中,我们很少直接操作协程对象,而是将其封装为 Task(任务)。

importasyncioasyncdefdownload_file(name):print(f"开始下载{name}...")awaitasyncio.sleep(2)# 模拟网络 IOprint(f"{name}下载完成!")returnf"{name}_data"asyncdefmain():# 创建任务(Task 会被立即加入事件循环等待执行)task1=asyncio.create_task(download_file("文件1"))task2=asyncio.create_task(download_file("文件2"))# 在这里,task1 和 task2 实际上已经在并行运行了print("主程序继续执行其他逻辑...")# 最终拿到结果res1=awaittask1 res2=awaittask2print(f"全部完成:{res1},{res2}")asyncio.run(main())

底层机制:

Future:它是结果的“占位符”。await 一个 Future 意味着“等它有结果了我再动”。

Task:是 Future 的子类。它负责把协程对象包装起来,丢进事件循环。

四、 避坑指南:await 的位置决定了并发性

这是很多新手最容易犯的低级错误:

反面教材(变回同步):

Python

这样写,下载 2 永远在下载 1 完成后才开始,完全没有并发!

res1=awaitdownload_file("文件1")res2=awaitdownload_file("文件2")

专家写法(真正并发):
使用 asyncio.gather() 或 asyncio.create_task()。

五、 核心揭秘:协程是怎么找回“记忆”的?

底层真相:
Python 的协程底层是基于**生成器(Generator)**的。每一个协程在挂起时,Python 解释器都会保留该协程的 Frame Object(栈帧对象)。这个对象里存着所有的局部变量和指令指针。这就是为什么它能像“暂停键”一样,在两秒后再精准地从断点处苏醒。

http://www.jsqmd.com/news/438509/

相关文章:

  • Vue 3 生态系统深度解析:核心技术与工具链
  • 正则中的扩展语法(?...)
  • 聊聊2026年有实力的Dyaco岱宇公司,上海地区口碑好的推荐 - 工业推荐榜
  • 总结科杰技术的品牌影响力大吗,西北地区设备价格多少钱 - myqiye
  • ClawX 消息频道快速部署:飞书、钉钉与主流 IM 一体化接入(3)
  • AWS IAM 创建与使用完整教程
  • 36 数据类型的取值范围和数据类型间的转换
  • 沃尔玛购物卡变现攻略,不浪费每一分 - 团团收购物卡回收
  • AI时代GEO服务商新标准:懂模型更懂业务
  • 头皮精华销量排行榜:看看大家都在买什么 - 博客万
  • 2026年重庆实验台厂家五大推荐:聚焦通风柜与钢木实验台的品质之选 - 深度智识库
  • 2026年最新指南:适合中小企业的轻量级Agent工具有哪些?实在Agent打破数字化门槛
  • 当服务器主板遇上国产EDA:2026服务器主板PCB设计国产高端软件推荐与解析 - 品牌2026
  • 2026年3月最新十款4年级背单词软件推荐测评
  • 聊聊长春诚信的大平层设计公司,哪家性价比高值得推荐 - myqiye
  • 在JavaScript / HTML中,事件委托和普通绑定事件的区别
  • nginx的 add_header 是给谁添加的?
  • 2026 实测:支持 AI 自动化的国产 PCB 软件推荐 - 品牌2026
  • 2026青少年洗发水哪个牌子最好用最安全?5大专业品牌深度测评 - 包罗万闻
  • 2026年头皮护理排行榜:年度趋势与好物前瞻 - 博客万
  • 测试随笔
  • 细聊全国先进牛奶生产线选购要点,上望机械制造不容错过 - mypinpai
  • 7款主流CRM品牌的四维深度对比(2026) - 毛毛鱼的夏天
  • 开工加满电,HarmonyOS SDK给你开挂体验
  • 不错的代驾平台企业有哪些,三玖驾到代驾上榜没? - 工业设备
  • apifox配置全局token
  • 浙大新研究让LVLMs懂版权、守规矩
  • 2026年分析仪选购指南:这些品牌凭实力获市场认可,ND1800 数模一体继电保护测试仪,分析仪公司哪家好 - 品牌推荐师
  • 盘点2026海外深度AI搜索公司,哪家口碑排名靠前 - 工业品牌热点
  • 工业级可视化引擎HOOPS Visualize Web 2026.1.0重塑Web 3D可视化体验