你的第一个代码的等价代码应该是这样的:
import asyncio
import time
async def hello_ivan(delay,what):
await asyncio.sleep(delay)
print(what)
async def main():
print( f"开始时间:{time.strftime('%X')}" )
task1 = asyncio.create_task(hello_ivan(3,"ivan"))
await task1# 某个高io操作 正常情况下, 需要他执行完成,才会执行lucy
task2 = asyncio.create_task(hello_ivan(1,"lucy"))
await task2# 某个高io操作 正常情况下, 需要他执行完成,才会执行lucy
print( f"结束时间:{time.strftime('%X')}" )
asyncio.run(main()) # 耗时3秒
你的那两种写法是不一样的,你的第二种写法在 await 之前所有 task 已经被创建完成,而第一种写法是创建一个 task 就 await 一个
你的那两种写法就相当于:
“你已经把所有任务打安排好了,剩下的就交给每个工人去完成了(那所有任务完成的时间就是完成最慢的那个的时间)”
与
“你要等工人完成上一个任务才开始安排下一个任务(那所有任务的完成时间就是每一个任务的完成时间之和)”
|