关于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()在超时后不会取消可等待对象


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM