Python语言参考指定object.__await__
如下:
object.__await__(self)
必须返回一个迭代器。应该用于实现可等待的对象。例如,
asyncio.Future
实现此方法以与await 表达式兼容。
就是这样。我发现这个规范非常模糊而且不是很具体(讽刺的是)。好的,它应该返回一个迭代器,但是它可以是任意迭代器吗?很明显不是:
import asyncio
class Spam:
def __await__(self):
yield from range(10)
async def main():
await Spam()
asyncio.run(main())
RuntimeError: Task got bad yield: 0
我假设asyncio
事件循环期望迭代器生成特定类型的对象。那么它到底应该产生什么?(为什么没有记录下来?)
编辑:据我所知,这在任何地方都没有记录。asyncio
但我一直在自己调查,我认为理解期望其协程产生什么对象的关键task_step_impl
在于_asynciomodule.c
.
更新:我已经向 cpython 存储库发出了 PR,目的是澄清这一点: “澄清”的模糊规范object.__await__
。
PR 现已合并,并且应该可以在 Python 3.10+ 的文档中找到。
温温酱
一只萌萌小番薯
相关分类