gpt4 book ai didi

python - "yield from"语法在 asyncio 中有什么作用,它与 "await"有何不同

转载 作者:IT老高 更新时间:2023-10-28 22:12:03 33 4
gpt4 key购买 nike

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

有一个highly upvoted关于 yield from 语法和 one explaining async and await 用法的问题,但两者都深入探讨了不同的主题,并没有真正简明地解释底层代码以及它如何适应 asyncio。

最佳答案

简答:

yield from 是等待 asyncio 协程的老方法。

await 是一种等待 asyncio 协程的现代方式。

详细回答:

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

从 Python 3.4 开始 asyncio 模块被添加到标准库中。它使我们能够编写清晰易懂的异步代码。虽然从技术上讲,asyncio 的协程可以通过不同的方式实现,但在 asyncio 中它们是使用生成器实现的(您可以观看 excellent video,其中显示了如何使用生成器来实现协程)。 @asyncio.coroutine 是一种从生成器生成协程的方法,而 yield from 是一种等待协程的方法——只是实现的细节。

这就是 yield from 开始被用于两个“不同的事情”的原因。

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

如果您使用的是 Python 3.5+,您可以忘记将 yield from 用于 asyncio 的协程,而使用 await 来实现它。

关于python - "yield from"语法在 asyncio 中有什么作用,它与 "await"有何不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44251045/

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