位置: 编程技术 - 正文

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

  • 一般纳税人每个月需要报哪些税
  • 如何查询企业税务状态
  • 有限责任公司的股东人数为多少
  • 固定资产出售净残值怎么处理
  • 以设备投资入股要交增值税
  • 公司车转个人名下要交多少税
  • 企业所得税营业收入是含税还是不含税
  • 企业筹办期间发生的开办费会计分录
  • 买车支付的车辆购置税怎么入账
  • 军队票据可作税前扣除凭证吗
  • 直线法计提折旧的公式预计净残值
  • 上月未计提税金,下月怎么做分录
  • 厂家给经销商的授权书
  • 核销贷款收回会计分录
  • 房产公司增值税和土地增值税
  • 支付短期借款计入什么科目
  • 免征增值税对应的进项税额怎么处理
  • 普通年金的定义
  • 装卸收入的增值税税率是多少
  • 给不是本单位的人开证明
  • 关于进项税额转出的规定
  • 董事监事的报酬包括哪些
  • 物流公司承担货物损失赔偿如何写会计分录
  • 定期定额自行申报表计税依据
  • 债券折价摊销属于借款费用吗
  • 资产负债表资产总额为负数
  • 退回社保费的会议记录
  • 收取的开票税点放哪个科目
  • 如何在excel中添加选项内容
  • 鸿蒙工具箱巅峰模式有什么用
  • 鸿蒙系统怎么隐藏状态栏
  • 如何显示或隐藏编辑标记
  • 前期差错更正怎么理解
  • php操作json
  • php生成php文件
  • php socket_create
  • 公允模式投资性房地产出售
  • 移动端页设计
  • php自动生成文章
  • 住宿费可以抵扣进项吗
  • dedecms更新
  • python中@是什么意思
  • python中的元组
  • 劳务报酬的个人所得税
  • 小型微利企业所得税按什么预缴
  • 工商年检截止日期
  • SQL Server 2008 R2占用cpu、内存越来越大的两种解决方法
  • 税控系统的维护包括哪些内容
  • 无形资产的摊销年限及摊销方法
  • 控股合并的账务处理
  • 防伪税控技术
  • 共同类科目性质
  • 增值税普通发票查询真伪
  • 固定资产内部转移流程
  • 工程结算审核资料清单
  • 预付款开了发票
  • 会计分录什么时候用负数表示
  • 猪肉蔬菜是免税农产品吗
  • 利润率多少算好
  • 会计处理是会计分录吗
  • sql以级联的方式删除表
  • mybatis报错invalid bound statement
  • Linux下mysql的root密码修改方法
  • linux怎么修改
  • window10电池
  • 电脑系统不重装怎么恢复原状
  • ajax 编码
  • android opengles2.0教程
  • 使用jquery
  • material design app
  • 基于jquery的框架有哪些
  • 使用Meteor配合Node.js编写实时聊天应用的范例
  • javascript:void(0)点击登录没反应怎么解决
  • 手把手教你打造班级主题环境 培训后心得
  • js鼠标滚动控制图片缩放
  • 广东交通定额发票在哪开
  • 深圳献血奖励标准
  • 2021年福建医保什么时候交
  • 如何抵扣缴纳增值税
  • 土地交的契税会计科目
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设