Azs*_*sgy 32 python generator coroutine async-await python-asyncio
从谁写ASYNCIO代码,但正在寻求更好地理解内部工作的人的角度来看,是什么yield from,await以及如何允许异步代码这些有用吗?
有一个高度赞成的问题询问yield from语法的用法和解释异步和等待的问题,但两者都深入讨论了不同的主题,并不是对底层代码及其如何适应asyncio的简明解释.
Mik*_*mov 43
简短回答:
yield from 是一种等待asyncio的协同程序的老方法.
await 是一种等待asyncio协同程序的现代方式.
详细解答:
Python有生成器 - 一种特殊的函数,它产生一系列结果而不是单个值.从Python 3.3 yield from表达式开始添加.它允许一个生成器将其部分操作委托给另一个生成器.
从Python 3.4开始,asyncio模块被添加到标准库中.它允许我们编写清晰易懂的异步代码.虽然技术上asyncio的协同程序可以以不同的方式实现,asyncio但它们是使用生成器实现的(您可以观看优秀的视频,其中显示了如何使用生成器来实现协同程序).@asyncio.coroutine是一种从发电机制作协程yield from的方法,是一种等待协程的方法 - 只是实施细节.
这就是yield from开始用于两个"不同的事情"的情况.
从Python 3.5开始(参见PEP 492),协同程序获得了新的语法.现在,您可以async def使用await表达式定义协同程序并等待它.它不仅写得更短,而且更清楚地理解我们使用asyncio的协同程序.
如果您使用的是Python 3.5+,则可以忘记使用yield fromasyncio的协同程序并使用await它.
| 归档时间: |
|
| 查看次数: |
9130 次 |
| 最近记录: |