asyncio
version 3.7.0
可等待對象
攜程
函數(shù)以async修飾,
調(diào)用需在函數(shù)名前加await,直接調(diào)用并不會運行,
async def nested():
return 42
任務(wù)
任務(wù)創(chuàng)建傳入的函數(shù)必須以async修飾
任務(wù)創(chuàng)建方式 asyncio.create_task(func())
調(diào)用需在任務(wù)名前加await,直接調(diào)用并不會運行,
async def nested():
return 42
task = asyncio.create_task(nested())
Futures
Future 是一種特殊的 低層級 可等待對象,表示一個異步操作的 最終結(jié)果。
當一個 Future 對象 被等待,這意味著協(xié)程將保持等待直到該 Future 對象在其他地方操作完畢。
在 asyncio 中需要 Future 對象以便允許通過 async/await 使用基于回調(diào)的代碼。
通常情況下 沒有必要 在應(yīng)用層級的代碼中創(chuàng)建 Future 對象。
Future 對象有時會由庫和某些 asyncio API 暴露給用戶,用作可等待對象:
函數(shù)介紹
asynic.run((coroutine, *, debug=False))
執(zhí)行coroutine并返回結(jié)果
當有其他asynico事件循環(huán)在同一線程中運行時,此函數(shù)不能被調(diào)用
如果Debug為True 事件將以調(diào)試模式運行
asyncio.create_task(coroutine)
返回一個Task對象
coroutine asyncio.sleep(delay, result=None, *, loop=None)
休眠
awaitable asyncio.gather(*aws, loop=None, return_exceptions=False)
并發(fā) 運行 aws序列中的 [可等待對象]。
如果 aws中的某個可等待對象為協(xié)程,它將自動作為一個任務(wù)加入日程。
如果所有可等待對象都成功完成,結(jié)果將是一個由所有返回值聚合而成的列表。結(jié)果值的順序與 aws 中可等待對象的順序一致。
如果 return_exceptions 為False(默認),所引發(fā)的首個異常會立即傳播給等待gather()的任務(wù)。aws 序列中的其他可等待對象 不會被取消 并將繼續(xù)運行。
如果 return_exceptions 為 True,異常會和成功的結(jié)果一樣處理,并聚合至結(jié)果列表。
如果 gather() 被取消,所有被提交 (尚未完成) 的可等待對象也會 被取消。
awaitable asyncio.shield(aw, *, loop=None)
保護一個 [可等待對象]
如果 aw 是一個協(xié)程,它將自動作為任務(wù)加入日程。
coroutine asyncio.wait_for(aw, timeout, *, loop=None)
等待 aw 可等待對象 完成,指定 timeout 秒數(shù)后超時。
如果 aw 是一個協(xié)程,它將自動作為任務(wù)加入日程。
timeout 可以為None,也可以為 float 或 int 型數(shù)值表示的等待秒數(shù)。如果 timeout 為None,則等待直到完成。
如果發(fā)生超時,任務(wù)將取消并引發(fā)asyncio.TimeoutError.
要避免任務(wù)取消,可以加上shield()。
函數(shù)將等待直到目標對象確實被取消,所以總等待時間可能超過 timeout 指定的秒數(shù)。
如果等待被取消,則 aw 指定的對象也會被取消。
coroutine asyncio.wait(aws, *, loop=None, timeout=None, return_when=ALL_COMPLETED)
并發(fā)運行 aws 指定的 可等待對象 并阻塞線程直到滿足 return_when 指定的條件。
如果 aws 中的某個可等待對象為協(xié)程,它將自動作為任務(wù)加入日程。直接向wait()傳入?yún)f(xié)程對象已棄用,因為這會導(dǎo)致 令人迷惑的行為。
返回兩個 Task/Future 集合:(done, pending)
done, pending = await asyncio.wait(aws)
如指定 timeout (float 或 int 類型) 則它將被用于控制返回之前等待的最長秒數(shù)。
請注意此函數(shù)不會引發(fā)asyncio.TimeoutError。當超時發(fā)生時,未完成的 Future 或 Task 將在指定秒數(shù)后被返回。
return_when 指定此函數(shù)應(yīng)在何時返回。它必須為以下常數(shù)之一:
image.png
與wait_for()不同,wait()在超時發(fā)生時不會取消可等待對象
