位置: 编程技术 - 正文

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

  • 发票专用章号码是老号码还能用吗
  • 资金账簿印花税每年都要交吗?
  • 工商年报认缴时间填错了
  • 会计调转是什么意思
  • 城建税 小规模
  • 2个公司的法人是谁
  • 不开发票的入账怎么办?
  • 融资租赁承租方增值税处理
  • 消防检测需要资质吗?
  • 审核发票的要点和方法
  • 核定企业的征收方式
  • 股东分红利息
  • 购买职工宿舍用品账务处理
  • 生产型企业出口非自产产品能享有退税吗
  • 油卡充值属于什么行业
  • 支票只能同城吗
  • 停车场如何申领车牌号
  • 生产成本为什么不属于费用
  • 分公司非独立核算是什么意思
  • etc充值发票可以抵扣税吗
  • 生产成本中材料款年末要全部结转吗
  • 所得税年报报完了怎么更正季报
  • 行政事业单位往来票据使用范围
  • 银行承兑汇票质押率90%
  • Win10 Build 19044.1319(21H1)预览版发布:修复 Bug提高安全性
  • 公司账户存款
  • 大堡礁分布在澳大利亚的哪里
  • vue引入mui
  • 位于Praprotno村之上的圣托马斯教堂 (© Guy Edwardes/Minden Pictures)
  • php的魔术函数
  • uniapp跨域解决方案
  • python2 tkinter
  • 员工休产假不发工资违法吗
  • 企业没有研发费用怎么做账
  • 如何修改php网页内容
  • mysql数据库介绍官方
  • sql server 判断数据是否存在
  • discuz设置门户
  • 房地产企业将开发产品用于职工福利
  • 税务实名认证是法人还是办税人
  • 运费和什么有关
  • 没有发票可以先入费用科目吗
  • 注销公司详细步骤
  • 政府扶持资金使用要求
  • 收到退回以前年度税款
  • 以非现金资产抵偿债务
  • 出售金融资产计入
  • 如果发票和实际不一样
  • 个人的车由公司来投保可以吗
  • 普通发票为什么只能领一张
  • 发票与销售小票有什么区别?
  • 无偿赠送货物如何申报增值税
  • 销售产品结转成本
  • 收到政府补贴现金流
  • 核销应收帐款分录
  • 原始股卖出需要缴税吗
  • 申请个税退税账号是什么
  • 取得普通发票怎么做账
  • 理财利息计入什么科目
  • 企业筹建期的开办费后期怎么算
  • 工业企业会计与管理论文
  • 管理会计与核算会计的区别
  • windows怎么管理员权限
  • 为什么总让升级浏览器
  • 利用ipy做ip地址的管理
  • windows 注册表命令
  • ubuntucommand not found
  • vsftpd配置用户登录目录
  • xp系统优化的方法
  • ubuntu如何打开
  • win8快捷键设置在哪里设置
  • win8.1卸载软件在哪里
  • javascript有哪些类型
  • java scripts
  • javascriptcsdn
  • 个体户开票怎么开步骤
  • 财务报表的收入平稳
  • 留抵税额退税政策2022年14号文件
  • 你需要了解什么 英语
  • 输入税控盘密码是填证书口令吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设