天天看點

async與awaitasync與await

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()
           

繼續閱讀