import asyncio
import time
now = lambda: time.time()
async def do_some_work(x):
print('Waiting: ', x)
await asyncio.sleep(x)
return 'Done after {}s'.format(x)
async def main():
coroutine1 = do_some_work(1)
coroutine2 = do_some_work(2)
coroutine3 = do_some_work(4)
tasks = [
asyncio.ensure_future(coroutine1),
asyncio.ensure_future(coroutine2),
asyncio.ensure_future(coroutine3)
]
dones, pendings = await asyncio.wait(tasks)
for task in dones:
print('Task ret: ', task.result())
start = now()
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
print('TIME: ', now() - start)
执行结果:
Waiting: 1
Waiting: 2
Waiting: 4
(这里隔了四秒)
Task ret: Done after 1s
Task ret: Done after 2s
Task ret: Done after 4s
TIME: 4.007018804550171
代码是网上复制的,不理解的是结果中那个停留了四秒。 按小白的理解,执行到第一个await asyncio.sleep(x)的时候跳 到第二个阻塞了又到第三个,然后第三个阻塞了不是应该跳回第一个吗? 然后跳 回函数内执行FRO循环。会先打印第一个出来 然后两秒后再打印第二个,然后四秒后再打印第四个。
上面的执行结果变成是等最后一个四秒结束后,一起for出来了。这里不理解? 求大佬解惑
condition1,contdition2,condition3是塞在一个队列里面的,condition1先取出来执行,执行到sleep,轮到下一个,下一个继续,一直到最后一个;然后condition1睡好了,开始继续往下,执行完后,后面的跟上