首页 > 编程语言 > 详细

关于python协程销毁、超时

时间:2021-03-09 14:25:25      阅读:28      评论:0      收藏:0      [点我收藏+]

概念

协程

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

关于python协程销毁、超时

原文:https://www.cnblogs.com/Chaosun/p/14504448.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!