位置: 编程技术 - 正文

asyncio 的 coroutine对象 与 Future对象使用指南

编辑:rootadmin

推荐整理分享asyncio 的 coroutine对象 与 Future对象使用指南,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

coroutine 与 Future 的关系

看起来两者是一样的,因为都可以用以下的语法来异步获取结果,

实际上,coroutine 是生成器函数,它既可以从外部接受参数,也可以产生结果。使用 coroutine 的好处是,我们可以暂停一个函数,然后稍后恢复执行。比如在涉及到网路操作的情况下,能够停下函数直到响应到来。在停下的这段时间内,我们可以切换到其他任务继续执行。

而 Future 更像是 Javascript 中的 Promise 对象。它是一个占位符,其值会在将来被计算出来。在上述的例子中,当我们在等待网络 IO 函数完成时,函数会给我们一个容器,Promise 会在完成时填充该容器。填充完毕后,我们可以用回调函数来获取实际结果。

Task 对象是 Future 的子类,它将 coroutine 和 Future 联系在一起,将 coroutine 封装成一个 Future 对象。

一般会看到两种任务启动方法,

ensure_future 可以将 coroutine 封装成 Task。asyncio.gather 将一些 Future 和 coroutine 封装成一个 Future。

asyncio.wait 则本身就是 coroutine。

run_until_complete 既可以接收 Future 对象,也可以是 coroutine 对象,

asyncio 的 coroutine对象 与 Future对象使用指南

Task 任务的正确退出方式

在 asyncio 的任务循环中,如果使用 CTRL-C 退出的话,即使捕获了异常,Event Loop 中的任务会报错,出现如下的错误,

Task was destroyed but it is pending!task: <Task pending coro=<kill_me() done, defined at test.py:5> wait_for=<Future pending cb=[Task._wakeup()]>>

根据官方文档,Task 对象只有在以下几种情况,会认为是退出,

a result / exception are available, or that the future was cancelled

Task 对象的 cancel 和其父类 Future 略有不同。当调用 Task.cancel() 后,对应 coroutine 会在事件循环的下一轮中抛出 CancelledError 异常。使用 Future.cancelled() 并不能立即返回 True(用来表示任务结束),只有在上述异常被处理任务结束后才算是 cancelled。

故结束任务可以用

这种方法将所有任务找出并 cancel。

但 CTRL-C 也会将事件循环停止,所以有必要重启事件循环,

在每个 Task 中捕获异常是必要的,如果不确定,可以使用

asyncio.gather(..., return_exceptions=True)

将异常转换为正常的结果返回。

基于asyncio 异步协程框架实现收集B站直播弹幕 前言虽然标题是全站,但目前只做了等级top直播间的全天弹幕收集。弹幕收集系统基于之前的B站直播弹幕姬Python版修改而来。具体协议分析可以看上

python开发环境PyScripter中文乱码问题解决方案 PyScripter看起来还是挺不错的一个pythonide环境:PyScripter2.6.0.0python3.4问题:PyScripter有个小坑,打开文件后中文都成了乱码。在PyScripter中新建的文件中文可

Python读取图片属性信息的实现方法 本文是利用Python脚本读取图片信息,有几个说明如下:1、没有实现错误处理2、没有读取所有信息,大概只有GPS信息、图片分辨率、图片像素、设备商、

标签: asyncio 的 coroutine对象 与 Future对象使用指南

本文链接地址:https://www.jiuchutong.com/biancheng/385414.html 转载请保留说明!

上一篇:Python中使用asyncio 封装文件读写(python asyncio)

下一篇:基于asyncio 异步协程框架实现收集B站直播弹幕(axios异步)

  • 财务负责人如何解绑
  • 工程施工企业收入确认成本结转案例
  • 建安行业是建筑行业吗
  • 接受资不抵债并账会计分录
  • 卫生清理费计入什么科目
  • 固定资产折旧的会计处理
  • 公司清算后资产负债表与利润表
  • 贴现法付息什么意思
  • 民办幼儿园怎么给老师交五险一金
  • 有没有薪酬
  • 幼儿园是否缴纳残疾人保障金
  • 抵免税款收益算其他收益吗
  • 信用减值损失属于什么会计要素
  • 建筑工程确认收入条件
  • 小规模纳税人季报是哪几个月
  • 招标文件中资金性质应填什么
  • 建筑行业收到劳务发票入工程施工科目
  • 收购免税农产品的税率
  • centos 6.5安装教程
  • 附加税会计分录2022
  • windows11怎么设置默认应用
  • php面向对象实例
  • 重装系统j
  • mac笔记本装了双系统后打开苹果系统和原来一样吗
  • 对于以长期投资为目的
  • 小米路由器青春版r1cl参数
  • 处置二手固定资产
  • hbuilderx的使用视频
  • 在计算应纳税所得额时,不允许作为税金项目
  • 税务机关如何判别c开发票视频
  • html可以描述什么
  • 月底结转汇兑损益
  • 怎么用ai做vi
  • 前端已死?金三银四?你收到offer了吗?
  • javascript教程
  • 实缴注册资本印花税如何缴纳
  • 工资和社保基数不一致
  • 税控盘开票日期一般截止到下个月几号
  • 金蝶kis的使用方法
  • 当月未付款算在次月吗
  • 固定资产加速折旧的方法有哪些
  • 固定资产清理是什么账户
  • 房地产企业成本核算方法
  • 本月损益类未结转为零的一级科目怎么操作
  • 季节性停工折旧计入什么科目
  • 商贸企业增值税税率是多少
  • 管理费用借方红字怎么记凭证
  • 不能抵扣的普通发票如何做分录
  • 房地产按揭贷款放款条件
  • 承兑汇票怎么贴
  • 兼职工资怎么做账
  • 做内账需要什么资料
  • 应付账款怎么做平
  • 如何处理记账凭证
  • sql server 将数字转换成日期
  • Select count(*)、Count(1)和Count(列)的区别及执行方式
  • 正确使用气体钢瓶的原则
  • mysql免安装版怎么使用
  • win7桌面右键菜单设置
  • 如何重设路由器密码怎么办
  • centos7如何扩展根分区空间
  • centos5.6
  • gnaupdaemon.exe是什么
  • centos 常用命令教程
  • xp输入法图标不显示图片
  • win10系统电脑开机密码在哪里设置
  • javascript HTML5 canvas实现打砖块游戏
  • nodejs实例教程
  • android读写sd卡权限
  • linux修改目录路径
  • u3d脚本语言
  • 用shell脚本创建用户
  • Using Django with GAE Python 后台抓取多个网站的页面全文
  • android sdk使用教程
  • locust框架
  • 江苏囯税电子
  • 怎么查询高速路封闭和开通
  • 粮仓计算公式
  • 耕地占用税 湖北
  • 安徽省渔业管理办法第十条规定
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设