欢迎访问 内存溢出 —— 独立后端与系统工程技术博客

专注于分布式系统、Linux内核、数据库存储与后端工程实践

Python 生成器与协程:yield 到 async/await 的演进

发表于:|最后更新:|分类:后端开发|阅读:7726 次
本文标签:Python协程生成器

Python 的协程能力脱胎于生成器,yield 关键字从单纯的值产出逐步演化为双向通信与异步调度的基础。

一、生成器的双向通信

python
def accumulator():
    total = 0
    while True:
        value = yield total
        if value is None:
            break
        total += value

acc = accumulator()
next(acc)        # 启动生成器,返回 0
acc.send(10)     # 返回 10
acc.send(5)      # 返回 15

send() 将值传入生成器,yield 既产出值又接收值,这构成了协程的雏形。

二、从 yield from 到 async/await

yield from 简化了生成器委托,PEP 380 引入后成为 await 的语义前身。PEP 492 正式引入 async def 与 await,将协程从生成器中分离为独立类型,使事件循环能够清晰区分普通生成器与可等待对象。