概念
協程
- 通過async/await語法進行聲明,是書寫python異步應用的推薦方式
可等待對象
- 如果一個對象可以在await中使用,那么它就是可等待/awaitable對象
- 類型:協程、任務、Future
async.sleep(delay, result=None, *, loop=None)
- 阻塞delay指定的秒數
- sleep()總是為掛起當前任務,以允許其他任務運行
場景
- Sanic后台任務執行失敗被掛起,不報錯,影響后續任務的進行
解決方案
對后台任務中可能出現失敗的協程增設超時
- asyncio.wait_for(aw,, timeout, *, loop=None)
- 等待aw可等待對象完成,指定timeout秒數后超時取消
- timeout可以為None,也可以為float/int數值表示的等待秒數。如果timeout為None,則等待直到協程返回
- 如果發生超時,任務將取消並引發asyncio.TimeoutError
- 要避免任務取消,可以加上shield()
簡單等待
- asyncio.wait(aws, *, loop=None, return_when=ALL_CONPLETED)
- 並發地運行aws可迭代對象中的可等待對象並進入阻塞狀態直到滿足return_when所執行的條件
- aws可迭代對象必須不為空
- 此函數不會引發asyncio.TimeoutError,當超時發生時,未完成的Future/Task將在指定秒數后返回;與
wait_for()
不同,wait()
在超時后不會取消可等待對象