gpt4 book ai didi

python - `yield from asyncio.sleep(delay)` 是做什么的?

转载 作者:太空狗 更新时间:2023-10-29 17:59:59 25 4
gpt4 key购买 nike

Python in a Nutshell 中的以下示例在延迟一秒半后将 x 设置为 23:

@asyncio.coroutine
def delayed_result(delay, result):
yield from asyncio.sleep(delay)
return result

loop = asyncio.get_event_loop()
x = loop.run_until_complete(delayed_result(1.5, 23))

我觉得很难理解 yield from asyncio.sleep(delay) 的作用。

来自 https://docs.python.org/3/library/asyncio-task.html#asyncio.sleep

Coroutine asyncio.sleep(delay, result=None, *, loop=None)

Create a coroutine that completes after a given time (in seconds). If result is provided, it is produced to the caller when the coroutine completes.

所以 asyncio.sleep(delay) 返回一个协程对象。

协程对象“完成”是什么意思?

yield from asyncio.sleep(delay) 向主程序提供什么值?

谢谢。

最佳答案

下面一行代码:

time.sleep(5)

...卡住代码的执行 5 秒。在 sleep 函数完成它的 5 秒小睡之前,不会计算或执行任何进一步的操作,因为如果没有 sleep 函数将控制权返回给调用者,应用程序将无法继续。这称为同步编程,当没有机制让应用程序在等待期间改变其焦点并完成其他任务时,例如等待调用数据库、Web API 的结果或在这种情况下的 sleep 功能.在同步编程中,不需要事件循环,因为不需要应用程序管理它的时间,也不需要为了提高效率而切换任务。

以下代码:

asyncio.sleep(5)

... 是 asyncio 库的一部分,专为异步编程而设计,其中 事件循环被分配要完成的任务 并且它(事件循环)监视其所有任务和开关的状态从一个到另一个,目的是尽量减少空闲/等待的时间。这不是同时执行多个进程的线程,这只是优化任务执行,因此 CPU 不会闲置,从而大大减少整体执行时间。

yield from 关键字(python 3.5 以上可以使用 await 关键字)是事件循环有机会完成一项任务的时刻(例如,从数据库返回查询时调用)并专注于事件循环知道的另一个任务,并且可以同时实际计算/执行。

@asyncio.coroutine decorator + yield from 与 python 3.5 兼容,但使用新关键字 async def 定义异步协程,并在其中使用 await 关键字以允许事件循环评估切换到另一个任务是常见的和如果您的年龄为 3.5 岁或以上, future 的证明方式。

异步 ​​python 可能很难让你头脑清醒,但在过去几年中有许多关于这个主题的优秀 pycon 演讲 - 在 Youtube 上寻找一个,如果当然阅读文档😇

关于python - `yield from asyncio.sleep(delay)` 是做什么的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46207991/

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