“yield from”语法在asyncio中的作用是什么?它与“await”有什么不同?

问题描述 投票:26回答:1

从编写asyncio代码但希望更好地理解内部工作原理的人的角度来看,yield fromawait以及那些对于允许异步代码有用的内容是什么?

有一个highly upvoted问题询问yield from语法和one explaining async and await的用法,但两者都深入讨论了不同的主题,并不是对底层代码及其如何适应asyncio的简明解释。

python async-await generator python-asyncio coroutine
1个回答
37
投票

简短回答:

qazxsw poi是一种等待asyncio协同程序的老方法。

qazxsw poi是一种等待asyncio协同程序的现代方式。

详细解答:

Python有生成器 - 一种特殊的函数,它产生一系列结果而不是单个值。从Python 3.3开始,添加了yield from表达式。它await一个生成器将其部分操作委托给另一个生成器。

从Python 3.4开始,yield from模块被添加到标准库中。它允许我们编写清晰易懂的异步代码。虽然技术上asyncio的协同程序可以以不同的方式实现,但在allows中它们是使用生成器实现的(您可以在asyncio中查看如何使用生成器来实现协同程序)。 asyncio是一种从发电机制作协程的方法,excellent video是一种等待协程的方法 - 只是实施细节。

这就是@asyncio.coroutine开始用于两个“不同的东西”的情况。

从Python 3.5开始(参见yield from),coroutines获得了新的语法。现在你可以使用yield from定义协同程序并使用PEP 492表达式等待它。它不仅写得更短,而且更清楚地理解我们使用asyncio的协同程序。

如果您使用的是Python 3.5+,则可以忘记将async def用于asyncio的协程并使用await

© www.soinside.com 2019 - 2024. All rights reserved.