async與await
async/await關鍵字是出現在python3.4以後,一個正常的函數在執行時是不會中斷的,是以你要寫一個能夠中斷的函數,就需要添加async關鍵。
async 可以将一個函數聲明為異步函數,異步函數的特點是能在函數執行過程中挂起,去執行其他異步函數,等到挂起條件消失後,再回來執行。
await 用來聲明挂起程式,例如異步程式在執行到某一步時需要等待一段時間,就将它挂起,去執行其他的異步程式。await 後面隻能跟異步程式或有__await__屬性的對象。這是因為異步函數和普通函數有所差別,例如一個異步函數被await聲明,當這個函數運作中出現阻塞就從這個函數中跳出去執行其他函數,當這個阻塞消失後,不論正在執行的其它函數是否執行完畢都要立即從那個函數跳回來。而如果是普通函數被聲明時,這時隻能等待這個函數被執行完才能跳回來,無法在執行過程中傳回。這種情況是沒有必要使用await的,直接在其它函數執行完畢再調用那個異步函數就行了。在一個異步函數種可以使用多個await。
import asyncio
async def fun1():
print("fun1:",1)
await asyncio.sleep(1)
print("fun1:",2)
async def fun2():
print("fun2",1)
await asyncio.sleep(2)
print("fun2",2)
loop = asyncio.get_event_loop() # 建立了一個事件循環loop
taks = [fun1(),fun2()]
loop.run_until_complete(asyncio.wait(taks)) #将協程注冊到事件循環loop中
loop.close()