位置: 编程技术 - 正文

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

  • 增值税专用发票可以开电子发票吗
  • 增值税附加税包括哪些税种及税率
  • 盘盈盘亏处理意见和建议
  • 如何查询继续教育证书
  • 开私家车出差如何报销差旅费
  • 合并报表调整分录理解
  • 会计凭证包括哪三种
  • 纳税申报表包含哪些内容
  • 增值税改革后增值税申报表怎么填写
  • 飞机发票和行程单可以一起开吗
  • 教育费附加可以扣除吗
  • 工资代扣的工会经费怎么做账
  • 土地增值税计税依据
  • 捐赠的固定资产账务处理
  • 包工包料挣钱吗
  • 本月出库金额等于什么
  • 企业收到宣传费怎么入账
  • 项目部租房办公应计入什么费用
  • 企业所得税清算是什么意思
  • 营改增通知规定的税收优惠政策
  • 已申报税额什么时候缴纳
  • 汇率的标价
  • 个税按工资薪金未按时申报的处罚规定
  • 发票勾选保存后不提交了能留到下月抵扣吗?
  • 微软发布Windows 10正式版 新浪
  • 结转基本生产成本
  • 开发票没有银行回单可以入帐吗?
  • 预付款退还的法律规定
  • 让记事本文件自动删除
  • 招标公司在招标过程中的注意事项
  • 十天学会php教程
  • 存货周转率公式怎么算
  • 自费出版的书籍可以售卖吗
  • 企业停产免征房产税
  • yolo v5 focus
  • 资产评估中折现怎么算
  • 销售赔偿款增值税和所得税
  • php 进程间通信
  • chatGPT身份指令
  • 微信转账怎么处理退回去
  • 应收账款期末余额在借方还是贷方
  • 企业年报网上申报入口贵州
  • 国税退税要多久能到账
  • 开票软件密码和口令锁定了,怎么解锁
  • vue–router
  • 机器学习——果蔬分类
  • 出租设备收入交什么税
  • 固定资产与固定资产净值的区别
  • 交易性金融资产属于流动资产
  • 支票存根联可以涂改吗
  • 水利建设行业
  • 境外企业向境内企业提供技术服务
  • 合伙 利润分配
  • sqlserver开启远程
  • mysql详细教程
  • mysql删除数据库用户
  • unix是什么语言
  • iis支持什么后端语言
  • fedora workstation怎么安装
  • linux操作系统常用操作命令
  • 三步搞定的贵公子发型教程
  • qqlogin.exe是什么进程 qqlogin.exe应用程序错误解决办法
  • 5个小技巧让你成长
  • Win10 Mobile Build 14327上手视频评测
  • win8怎么删除所有东西
  • cocos2dx安装win7教程视频
  • ext.formpanel
  • node-red 全局变量
  • unity向量的规范化
  • jquery 异步提交表单
  • js如何使用
  • python怎么写字符串
  • 酒店住宿的发票图片
  • 开发票收多少税点?
  • 浦发银行企业银行电话
  • 房产税可以抵扣增值税吗
  • 发票校验码不清楚
  • 深圳国税app官方下载
  • 公司投资款可否取回
  • 契税计算器在线计算
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设