当我转到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!
我故意将时间从1s增加到5s,希望看到一些特别的东西,但是我没有。
答案 0 :(得分:3)
您不会看到什么特别的东西,因为您的代码中没有太多异步工作。但是,主要区别在于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)
并未阻止脚本的执行。
希望它会有所帮助:)