位置: 编程技术 - 正文

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

  • 私车公用的税务风险
  • 增值税加计抵减政策10%和15%
  • 增值税税控系统技术维护费怎么做账
  • 怎么找高新技术企业的数据
  • 哪些费用可在缴纳医保
  • 单位收到已交个税的劳务发票还需要申报个税吗
  • 营业执照备案登记流程
  • 金税三期电子发票怎么领取
  • 仓库打包用的物品计什么科目
  • 出口退税贷方余额是什么意思
  • 出租的土地使用权是无形资产吗
  • 通行费发票怎么合并一张发票
  • 增值税进项税额计算公式
  • 按月按季申报
  • 递延收益为什么是非流动负债
  • 注销公司报表应注意什么
  • 企业所得税不征税收入
  • 航空运单可以作为提货凭证吗
  • 购进货物进项不予抵扣
  • 固定资产被盗报警
  • 公益性捐赠会计分录金额
  • 减免增值税后附加税还用计提吗
  • 股东打入公户的钱怎么做账
  • 违约金抵扣货款等于现金折扣吗会计分录
  • 小规模纳税人与注册资金有关系吗
  • 销售退回跨年所得税如何做账?
  • 调整已结转的税种有哪些
  • 图书发票没有明细能报销吗?
  • 个人所得税app入职时间不对
  • 折价退回的会计处理
  • 个体户可以不领税控盘吗
  • 研究开发费用扣除标准
  • 房地产工程质量检测费计入什么科目
  • 应付职工薪酬明细表怎么填写
  • 金银制成的金银币及摆件是否征收消费税?
  • 微软系统管理员账号
  • 进口缴纳的关税通过什么核算
  • 增值税普通发票和电子普通发票的区别
  • 资产负债表其他流动资产计算公式
  • 税务退回城建税期末怎么结转
  • deepin声音
  • 电脑dat文件怎么打开
  • 撤销银行账户
  • 工资薪金所得具体包括哪些
  • 秘鲁亚马逊木业有限公司招聘
  • php常用的魔术方法有哪些
  • php yeid
  • 融资租入固定资产是什么意思
  • 我的第一次作文400字左右
  • java泛型方法的作用
  • 人力资源企业税收风险
  • 期初认证相符但未申报抵扣的进项如何消除
  • 平时加班和节假日加班工资
  • 非金融企业借款利息收入计入什么科目
  • 现金流量表里支付的各项税费包括什么
  • 收到银行借款并存入银行会计分录
  • 购买理财产品现金流量表
  • 所得税后净现金流量计算
  • 社保金的滞纳金个人承担吗?
  • 商标的使用权
  • 政府会计制度累计盈余为负数
  • 工业企业增值税负率一般控制在多少
  • sqlserver的sql文件导入mysql
  • 微信公众平台在哪里打开
  • windows自动操作软件
  • 如何在macbook中设置软件权限
  • centos怎么调出终端
  • windows中的帐户类别administrator为
  • win10桌面图标显示错误
  • win7系统垃圾手动清理
  • 电脑开机出现windows7
  • perl 时间转换
  • js实现功能
  • 请问在javascript程序中
  • 财政部国家税务总局
  • 12366属于哪个部门
  • 进口小麦关税税率是多少
  • 北京第六税务所电话号码
  • 审计报告的数据真实性
  • 关于小规模纳税人的说法正确的有
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设