Python 3.x 为什么本机协同路由的收益是有效的语法
介绍了语法的收益率,并指出:Python 3.x 为什么本机协同路由的收益是有效的语法,python-3.x,python-asyncio,python-3.3,Python 3.x,Python Asyncio,Python 3.3,介绍了语法的收益率,并指出: yield from <expr> 合法吗?因为声明本机协程不实现\uuu iter\uuu和\uu next\uuuu方法,因此不适用。然而,并没有PEP讨论从接受本机协同路由返回的协同路由对象的行为的这种变化 我知道基于生成器的协同程序在3.10中会被弃用,但我仍然想知道为什么yield from可以与本机协同程序一起工作 然而,我无法理解为什么从本机协同程序中产生(使用异步/等待语法) 合法吗?因为PEP-492声明本机协同程序不实现\uuuuu
yield from <expr>
合法吗?因为声明本机协程不实现\uuu iter\uuu
和\uu next\uuuu
方法,因此不适用。然而,并没有PEP讨论从接受本机协同路由返回的协同路由对象的行为的这种变化
我知道基于生成器的协同程序在3.10中会被弃用,但我仍然想知道为什么yield from
可以与本机协同程序一起工作
然而,我无法理解为什么从本机协同程序中产生(使用异步/等待语法)
合法吗?因为PEP-492声明本机协同程序不实现\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
和\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
然而,PEP 492指出“基于生成器的协同程序[…]可以从
本机协同程序对象中产生。”
然而,我不明白为什么本地合作项目的收益是合法的
因为在其他情况下,本机协程将无法从使用基于生成器的协程的遗留代码中使用,并且从
中生成
例如,在引入async def
之后的某个时刻,大多数asyncio原语,包括asyncio.sleep
,都被转换为async def
协同程序。如果那些不支持从
产生,则转换将使用以前唯一可能的等待方式从
产生,打破所有等待asyncio.sleep
的现有异步IO代码。这种向后的不兼容性可能会阻碍本机协同程序的引入,因此避免了这种情况。我理解您所描述的从中产生本机协同程序的基本原理。但是,我正在寻找描述此行为的权威文档/PIP。@dataCheeku PEP 492中描述了此行为,我现在已修改了答案,以明确说明此行为。
yield from native_coroutines (using async/await syntax)