位置: 编程技术 - 正文

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

  • 小规模纳税人如何计算增值税
  • 税务稽查最坏结果不知情人员怎么办
  • 工资的计提与结转怎么算
  • 税负率是含税还是不含税
  • 贴现率和折现率相等吗
  • 税控设备抵减增值税会计处理
  • 当月发票作废需要收回么
  • 附加税退税申请表的填
  • 建筑公司现金日记账怎么填写
  • 电子承兑过期后怎么兑现处理合适呢?
  • 亏本销售商品如何做其会计分录?
  • 车间不生产时折旧怎么算
  • 单位买另一单位银行承兑汇怎样入账?
  • 质量保证金的预留比例是多少
  • 已抵扣的进项税发票开具红字发票信息表
  • 发票专用章只能盖一个
  • 居民委员会有没有纳税人识别号吗
  • 个人所得税福利费免税范围
  • 汇率的标价
  • 筹建期可以有收入吗
  • 预付账款怎么做账
  • 企业分红给企业股东怎么交税
  • 工程项目人工费比例
  • 红字发票信息表是销方还是购方开
  • 社会保险生育险能报多少
  • 存货损失进项税
  • win10远程连接提示身份验证错误
  • 在win7系统中怎样卸载win10?
  • win11电脑怎么重置
  • 蜡梅的养殖方法视频
  • 已提减值准备的固定资产报废怎么填写
  • 社保通过银行缴纳
  • frameworkscheduled
  • 同一控制下控股合并在合并日合并报表编报正确的有
  • thinkphp怎么用
  • 什么是零申报制度
  • 企业收到发票后怎么入账
  • 销项和进项税额还需要月底转出么
  • 购买的商品作为赠品怎么入账
  • 织梦怎么用模板建站
  • 增值税发票的规范
  • 固定资产折旧常见方法
  • 季度所得税申报怎么弥补以前年度亏损
  • 什么叫做有限循环小数
  • 企业营业执照的颁发部门是
  • 金银首饰以旧换新增值税处理
  • 公司拨款给个人分录
  • 专票金额和实际报销金额不符
  • 关联方资金往来是否收取利息
  • 费用提前预支的请示
  • 不含税转换
  • 酒店租金计入什么会计科目
  • 为什么委托代销业务受托方要反映或有负债
  • 销售商品结转成本的记账凭证
  • 小微企业免征增值税优惠
  • 金融企业借款费用计入
  • 在MySQL中使用通配符时应该注意的问题
  • SQLserver中cube:多维数据集实例详解
  • mysql null+1
  • win10打开文件夹弹出新窗口
  • win8笔记本无法更新正在撤销更改
  • Win10最新版下载天翼云盘
  • windos撤销
  • win7的语言栏不见了
  • win7共享打印机提示0x000709
  • 深入react技术栈
  • bootstrap模态框按钮无响应
  • python有没有翻译库
  • nodelink
  • Python工程师面试题 与Python Web相关
  • dom教学
  • python simpy
  • 税率是从什么时候有17%改为13%的呢
  • 怎么打印纳税申报清单
  • 进口设备如何交税
  • 河南省地方税务局公告2017年第4号
  • 云南国税局官网网站
  • 地税注销流程
  • 西乡塘区税务局电话
  • 广州市地税服务大厅
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设