位置: 编程技术 - 正文

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异步)

  • 房地产开发企业资质等级有几个
  • 增值税应纳税额是要交的钱吗
  • 机票里面的其他税费抵扣吗
  • 农产品进项税额计算扣除的方法
  • 半成品原材料报废会计处理怎么做?
  • 经营租赁不动产发票备注栏
  • 单位充话费送手机
  • 生产共同费用每个月都有摊销吗?
  • 建安企业预缴个税怎么算
  • 什么叫含税级距和不含税级距
  • 增值税专用发票有效期是多长时间
  • 内部退养个税计算方式
  • 企业法人信息变更
  • 虚假会计凭证有哪些识别方法
  • 追补确认年度是哪一年
  • 工商营业年报怎么做
  • 小规模季报还没报改了一般纳税人
  • 购置土地税款怎么入账?
  • 公司自有房屋出租 营业范围
  • 企业注销所得税汇算清缴
  • 银行 环保
  • 职工教育经费培训费扣除比例
  • 个人劳务费几个点
  • 出口退免税的基本政策包括
  • 苹果电脑里的finder是什么
  • linux用不了yum
  • PHP:Memcached::getAllKeys()的用法_Memcached类
  • 向银行借入长期借款50万元
  • 企业记账的主要内容包括
  • 补缴企业所得税和滞纳金如何入账
  • 捐赠支出如何做账
  • php sql 教程
  • window.eval方法
  • 个人电子发票怎么查询
  • 社保台账显示未托收
  • 哪些税是季报
  • 帝国cms移动端
  • python 操作数据库
  • 代收代付进项税转出吗
  • 解决掉发的有效方法
  • 什么是保函保证金
  • excel账务处理心得
  • 增值税扣税公式
  • 以前年度的银行流水可以补进来做账嘛
  • 研发产品相关专业
  • 存量资金上缴财政怎么做账
  • 筹资费用和财务费用一样吗
  • 收到预付卡的发票是否可以报销呢?
  • 给聘用人员每月多少钱
  • 转出的未交增值税转到应交增值税
  • 企业被收购会产生哪些税
  • 红字发票最多几个月
  • 个人开具的收据能税前扣除吗
  • 员工的探亲费应由谁支付
  • 普通发票和增值税发票的区别图片
  • 买车给了上牌费去车管所还用给钱吗
  • 事业单位补提以前年度应计提未计折旧的会计分录
  • 成本核算方法是移动加权平均法吗
  • 年底计提利息会计分录
  • 食堂的电费能分两次交吗
  • 如何系统还原xp
  • Ubuntu Kylin 14.10默认的屏幕分辨率怎么更改?
  • Linux中怎么安装nano已经有安装包了
  • 学习笔记一
  • js中不用var声明
  • 举例说明Java实现适配器模式
  • ext.grid.gridpanel
  • jquery-file-upload 文件上传带进度条效果
  • css中选择符
  • android 笔记软件推荐
  • unity3d如何导入图片
  • jquery cookie存取
  • python中如何去除空格
  • 浙江省医保改革方案2022
  • 国家税务总局23号文件
  • 国家税务局河北省税务局
  • 不交社保申报个税有风险吗
  • 电子税务局房产税怎么申报
  • 专用发票收款人可以盖私章吗
  • 白酒生产企业向百货公司销售试制药酒
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设