gpt4 book ai didi

python - 委托(delegate)给异步子生成器

转载 作者:行者123 更新时间:2023-12-01 14:36:51 25 4
gpt4 key购买 nike

PEP 380介绍yield from让生成器委托(delegate)给子生成器。
值得注意的是,send() , throw()close()对委托(delegate)生成器的调用将被转发到子生成器:

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'))

打印
1
Received: msg1
2

PEP 525引入了异步生成器,它们能够等待异步协程并产生消费者可以等待的结果。与生成器一样,异步生成器也可以接收使用 asend() 发送的值。 (并支持 athrow()/ aclose() )。

有没有办法委托(delegate)给异步子生成器? 以下不起作用:子生成器没有收到发送的值,因为 asend()不转发。可以在 agen2 中手动完成, 但是 yield from用它的简单性宠坏了我们。像 async yield from 这样的事情吗?存在?

async def agen1():
res = yield 1
print('Received:', res)
res = yield 2

async def agen2():
async for x in agen1():
yield x

async def consumer():
ag = agen2()
print(await ag.asend(None))
print(await ag.asend('msg1'))

import asyncio
asyncio.run(consumer())

输出:
1
Received: None
2

最佳答案

不。

根据 PEP 525 https://www.python.org/dev/peps/pep-0525/#asynchronous-yield-from async yield from “将需要对生成器的实现进行认真的重新设计。”

关于python - 委托(delegate)给异步子生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59079512/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com