位置: 编程技术 - 正文

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

  • 未达起征点的增值税要交企业所得税吗
  • 支付所得税的会计处理
  • 三大流转税包括哪些
  • 对方给我公司开的红字发票如何查询
  • 小型微利企业认定标准最新
  • 注册资本印花税按年申报还是按次申报
  • 企业注销其他应付款可以转入未分配利润吗
  • 原材料加工成品怎么做账
  • 小规模纳税人零申报是每季度报吗
  • 冲暂估成本的会计分录
  • 行政单位举办活动能发奖奖金吗
  • 个人房源可以委托别人吗
  • 资管产品增值税征收管理规定
  • 营业收入在财务报表上跟实际多出来怎么解释
  • 母公司吸收合并全资子公司
  • 抵税的税额怎么计算
  • 长期待摊未摊完处置如何账务处理
  • 内部存货交易的抵消分录例题讲解
  • 借用下属单位人员违反什么政策
  • 资产减值损失会影响营业利润吗
  • 持有至到期投资减值准备
  • 小规模旅游业的会计分录怎么写
  • php email
  • 员工购买住房公积金申请
  • 结转代销成本
  • 支付的招标代理费计入成本还是费用
  • html里面有什么
  • thinkphp apidoc
  • vue新手教程
  • 长期股权投资会计准则
  • 稿费演出费等劳务收入算工资吗
  • 以银行存款交纳欠缴税金
  • 研发费用大于收入
  • 利润表中的管理费用怎么填
  • 交易性金融资产处置时的会计核算步骤
  • 进什么税额
  • 帝国cms wordpress
  • 印花税的计税依据为各种应税凭证上所记载的计税金额
  • 应收处理的两大内容是什么
  • 国家企业信用公示信息公示
  • 通用发票如何缴销
  • 电子发票怎么开具流程呢?
  • 用房子贷款印花税怎么算
  • MySQL读写分离中间件
  • 银行存款日记账电子表格模板
  • 主营业务成本大于主营业务收入怎么办
  • sql数据对比语句
  • 销售中介费一般收多少
  • 外购产品对外捐赠的会计处理方法
  • 小微企业免税销售额怎么填
  • 进项发票还未收到可以认证吗
  • 视同内销账务处理怎么做?
  • 加油票和过桥过路费怎么做账
  • 当月作废的采购发票已认证账务如何处理?
  • 发票已开后 对方公司名称变更怎么处理?
  • 产品出库检验报告单格式
  • 研发投入算到产值里吗
  • 存货盘亏的账务处理怎么做
  • sql server使用sql语句
  • XP系统如何设置变流畅
  • 找回被删除的文件时第一步应该是什么
  • 详述社会体育学科的研究对象
  • 注册表的命令
  • win8应用商店打开很慢怎么办
  • ubuntu怎么添加一个新用户
  • un安装失败
  • win10预览版和正式版区别
  • windows7无法继续安装
  • 如何在linux安装软件
  • python基本用法
  • 梦见擦窗户框
  • vbs运行cmd命令
  • socketio视频教程
  • 批处理forfiles
  • python数据结构之数组
  • javascript面向对象编程指南第三版
  • python设计二叉树结构
  • 安徽省工商总局
  • 山东省水资源税征收标准
  • 国税优盘安装教程
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设