当前位置: 首页 > 面试题库 >

异步中的“ yield from”语法有什么作用?与“ await”有何不同

井宪
2023-03-14
问题内容

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

有一个非常受质疑的问题,询问yield from语法的用法,一个问题解释了async和await,但是两者都深入探讨了不同的主题,并且并不是对基础代码及其与asyncio的配合的简要说明。


问题答案:

简短答案:

yield from 是等待asyncio协程的一种旧方法。

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

详细答案:

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

从Python
3.4开始,asyncio模块已添加到标准库中。它使我们能够编写清晰易懂的异步代码。尽管从技术上讲asyncio的协程可以用不同的方式实现,asyncio但它们是使用生成器实现的(您可以观看出色的视频,其中显示了如何使用生成器实现协程)。@asyncio.coroutine是从生成器制作协程的yield from一种方法,也是一种等待协程的方法-只是实现的细节。

这就是yield from开始被用于两个“不同事物”的过程。

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

如果您使用的是Python 3.5+,则可能会忘记将其yield from用于asyncio的协程await



 类似资料:
  • 我得到以下警告... 警告1此异步方法缺少await运算符,将同步运行。考虑使用'await'运算符来等待非阻塞API调用,或者使用'await task.run(...)'在后台线程上执行CPU绑定的工作。

  • 没有await并且在非异步方法中调用异步方法的行为是什么?我这样问是因为我看到Visual Studio在调用异步方法时没有显示任何警告,好像这是一件非常正常的事情。在这种情况下,异步方法的行为是否像是同步的?

  • 这两种方法的主要区别是什么? 第一个使用

  • 问题内容: 对于pythonselenium,我不太了解VS 的确切区别。。两者似乎可以互换使用,以设置超时时间以通过加载URL ,但有时也可以一起使用。 场景1 : 方案2 : 两种情况有何不同? 哪些情况在一种情况下触发了超时,但另一种情况却未触发? 问题答案: 根据 Selenium-Python API Docs 和两者都是 超时 方法,用于将 webdriver 实例配置为在程序执行期间

  • 本文向大家介绍JavaScript与java语言有什么不同,包括了JavaScript与java语言有什么不同的使用技巧和注意事项,需要的朋友参考一下 讲个故事:话说很久很久以前,有一个叫网景(Netscape)的,十月怀胎,他生了个儿子,很开兴,给儿子取名livescript。Livescript很勤奋,帮大叔大婶干了好多活,也给他爸赚了很多钱。突然一天sun生了个儿子:java,java很厉害