关于python协程销毁、超时
概念 协程 通过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()在超时后不会取消可等待对象