小编典典

Python 3.7-asyncio.sleep()和time.sleep()

python

当我转到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秒,希望看到一些特别的东西,但我没有。


阅读 215

收藏
2020-12-20

共1个答案

小编典典

您不会看到什么特别的东西,因为您的代码中没有太多异步工作。但是,主要区别在于它time.sleep(5)是阻塞的,并且asyncio.sleep(5)是非阻塞的。

time.sleep(5)被调用时,它会阻止脚本的整个执行,它会被搁置,只是冻结,无所事事。但是,当您调用时await asyncio.sleep(5),它将在等待语句完成执行时要求事件循环运行其他内容。

这是一个改进的示例。

import asyncio

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

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

asyncio.run(main())

将输出:

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

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

希望能帮助到你 :)

2020-12-20