gpt4 book ai didi

python - asyncio.sleep() 与 time.sleep()

转载 作者:行者123 更新时间:2023-11-28 20:55:28 29 4
gpt4 key购买 nike

当我转到 asyncio 页面时,第一个示例是一个 hello world 程序。当我在 python 3.73 上运行它时,我看不出与正常的有什么不同。 谁能告诉我区别并举一个重要的例子?

In [1]: import asyncio
...:
...: async def main():
...: print('Hello ...')
...: await asyncio.sleep(5)
...: print('... World!')
...:
...: # Python 3.7+
...: asyncio.run(main())
Hello ...
... World!

In [2]:

In [2]: import time
...:
...: def main():
...: print('Hello ...')
...: time.sleep(5)
...: print('... World!')
...:
...: # Python 3.7+
...: main()
Hello ...
... World!

我有意将时间从 1 秒增加到 5 秒,希望看到一些特别的东西但我没有。

最佳答案

您没有看到任何特别之处,因为您的代码中没有太多异步工作。但是,主要区别在于 time.sleep(5) 是阻塞的,而 asyncio.sleep(5) 是非阻塞的。

time.sleep(5) 被调用时,它会阻止脚本的整个执行,它会被搁置,只是卡住,什么都不做。但是当您调用 await asyncio.sleep(5) 时,它会要求事件循环在您的 await 语句完成执行时运行其他内容。

这是一个改进的例子。

import asyncio

async def hello():
print('Hello ...')
await asyncio.sleep(1)
print('... World!')

async def main():
await asyncio.gather(hello(), hello())

asyncio.run(main())

将输出:

~$ python3.7 async.py
Hello ...
Hello ...
... World!
... World!

您可以看到 await asyncio.sleep(1) 没有阻止脚本的执行。

相比之下,将 await asyncio.sleep(1) 行替换为 time.sleep(1),输出将是

Hello ...
... World!
Hello ...
... World!

因为 time.sleep 是阻塞的并且 hello() 的第一次调用必须在 hello() 的第二次调用之前先完成开始运行。

关于python - asyncio.sleep() 与 time.sleep(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56729764/

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