-
Python中的函數類型
Python中有四種常見函數類型:
# 1. 普通函數 FunctionType def function(): return 1 # 2. generator function :GeneratorType def generator(): yield 2 # 生成器 # async修飾將普通函數和生成器函數包裝成異步函數和異步生成器 # 3. 異步函數(協程) :CoroutineType async def async_function(): return 3 # 4. 異步生成器 : AsyncGeneratorType async def async_function(): yield 4
-
異步函數
直接調用異步函數不會返回結果,而是返回一個
coroutine
對象。協程需要通過其他方式來驅動,可以通過這個協程對象的send方法給協程發送一個值。
在協程函數中,可以通過await語法來掛起自身的協程,並等待另一個協程完成直到返回結果。
async def async_function(): return 1 async def await_coroutine(): result = await async_function() # await只能出現在通過async修飾的函數中;其後是一個awaitable print(result) run(await_coroutine())
-
awaitable類
實現了
__await__
方法的類。 -
AsyncGenerator
需要實現__aiter__、__anext__兩個核心方法,以及asend、athro、aclose方法。
-
async/await語法
完成異步的代碼不一定要用async/await;
使用了async/await的代碼也不一定能做到異步;
async/await是協程的語法糖,使協程之間的調用變得更加清晰:
- 使用async修飾的函數調用時會返回一個協程對象;
- await只能放在async修飾的函數裏面使用;
- await後面必須要跟着一個協程對象或者Awaitable;
- await的目的是等待協程控制流的返回;
- 實現暫停並掛起函數的操作的是yield;
-
async作用
常規函數開始執行後一直運行到
return
實現退出,如果需要能夠中斷的函數,就需要添加async
關鍵字。async
用來聲明一個函數爲異步函數,異步函數的特點就是能在函數執行過程中被掛起,去執行其他異步函數,等掛起條件消失後再回來執行。 -
await作用
await
用來聲明程序掛起。await
後面只能跟異步程序或有__await__
屬性的對象。兩個異步程序async a、async b:
- a中一步有await,當程序碰到關鍵字await b後;
- 異步程序a掛起,去執行異步b程序(就相當於從一個函數內部跳出去執行其他函數);
- 當掛起條件小時候,不管b是否執行完,要馬上從b程序中跳出來,回到原程序a執行原來的操作;
如果await後面跟的b函數不是異步函數,那麼操作就只能等b執行完再返回,無法在b執行的過程中返回,這樣就相當於直接調用b函數,沒必要使用await關鍵字了。
因此,需要await後面跟的是異步函數。
-
Reference
Python異步async/await概念、用法(二)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.