mxp*_*mxp 6 python asynchronous generator python-asyncio
PEP 380引入了yield from让生成器委托给子生成器的功能。值得注意的是,send()、throw()或close()对委托生成器的调用将被转发到子生成器:
def gen1():
res = yield 1
print('Received:', res)
res = yield 2
def gen2():
yield from gen1()
g = gen2()
print(g.send(None))
print(g.send('msg1'))
Run Code Online (Sandbox Code Playgroud)
印刷
1
Received: msg1
2
Run Code Online (Sandbox Code Playgroud)
PEP 525引入了异步生成器,它能够等待异步协程并生成可供消费者等待的结果。与生成器一样,异步生成器也可以接收使用asend()(并支持athrow()/ aclose())发送的值。
有没有办法委托给异步子生成器?以下不起作用:子生成器没有收到发送的值,因为asend()没有转发。它可以在 中手动完成agen2,但yield from它的简单性已经让我们失望了。有类似的东西async yield from存在吗?
1
Received: msg1
2
Run Code Online (Sandbox Code Playgroud)
输出:
1
Received: None
2
Run Code Online (Sandbox Code Playgroud)
不。
根据 PEP 525 https://www.python.org/dev/peps/pep-0525/#asynchronous-yield-from async yield from “需要对生成器实现进行认真的重新设计。”