当我转到asyncio页面时,第一个示例是hello world程序。当我在python上运行它时3.73,我看不出与正常的任何区别, 有人可以告诉我区别并举一个简单的例子吗?
asyncio
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)
asyncio.sleep(5)
当time.sleep(5)被调用时,它会阻止脚本的整个执行,它会被搁置,只是冻结,无所事事。但是,当您调用时await asyncio.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)并没有阻止脚本的执行。
希望能帮助到你 :)