【发布时间】:2021-02-07 11:51:46
【问题描述】:
我已经阅读了很多解释 Python 中的 async 的不同文章。但是他们都举了asyncio.sleep(x)的例子,比如这个:
import asyncio
async def test1 ():
await asyncio.sleep(1)
print(1)
async def test2 ():
print(2)
async def main ():
await asyncio.gather(test1(), test2())
asyncio.run(main()) #prints 2, then 1
在这种情况下,对我来说一切都很清楚:函数 test1 中的 await 表示在执行 asyncio.sleep 期间我们可以做其他事情,例如执行函数 test2。
我不明白的是,如果我不在我的代码中使用睡眠,那么异步如何有用?在这种情况下如何同时运行函数?比如下例中如何同时运行函数test1和test2?
import asyncio
import time
async def calculate (a):
return a**a
async def test1 ():
x = await calculate(1111111)
print('done!')
async def test2 ():
for i in range(100):
print('.', end='')
async def main ():
await asyncio.gather(test1(), test2())
asyncio.run(main()) #prints 'done!' before the dots
【问题讨论】:
-
asyncio是 great 当你有代码需要等待的事情。就像网络响应,或者某些事件的发生,比如电子邮件已经到达。每个await都是其他代码运行的机会,代码不再需要等待。 -
我要补充一点,以
yield结尾的每条awaits 链(例如,await some_future归结为这一点。)是异步执行代码的机会。如果您await的函数不使用await使用asyncio功能的函数,例如asyncio.sleep(),但只是返回一个结果,那么在这种情况下,asyncio没有任何好处。
标签: python python-3.x asynchronous python-asyncio