概念
协程
- 通过async/await语法进行声明,是书写python异步应用的推荐方式
可等待对象
- 如果一个对象可以在await中使用,那么它就是可等待/awaitable对象
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()
在超时后不会取消可等待对象
关于python协程销毁、超时
原文:https://www.cnblogs.com/Chaosun/p/14504448.html