位置: 编程技术 - 正文

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聚焦无法显示 为灰色
  • 生产成本怎样结转科目明细
  • 笔记本cpu天梯图苹果
  • php嵌入js
  • 还款本息和本金哪个划算
  • php中strcmp函数
  • 土地使用权进项税如何抵扣
  • 担保公司计提的费用
  • 离退休干部书报费有关文件
  • thinkphp5上传图片
  • 税控盘和金税盘的功能一样吗
  • 企业支付宝要交税吗 要交多少钱
  • php递归算法1加到100
  • 无法将node项识别为
  • 外经证过期没核销罚多少钱
  • fold命令 限制文件列宽
  • 缴税的会计处理
  • 企业提取盈余公积属于什么会计科目
  • 国外商贸公司
  • 处置固定资产净收益属于利得吗
  • 纳税人应按照当期可抵扣进项税额的10%
  • 模板的固定
  • 补提去年企业所得税会计分录
  • 个人提供劳务报酬如何交税
  • 买车挂公司名下的坏处
  • 金税四期上线企业还活吗
  • 固定资产一次性扣除政策
  • 堤围防护费是什么
  • 成本利润率多少是正常的
  • 小微企业记账必须有会计证吗
  • 股东实收资本超额到位
  • 一般纳税人主表中的25是怎么来的
  • 价税分离购销合同模板
  • 技术咨询服务开票代码
  • 开出普票会计分录
  • 资产减值损失冲减
  • sql server重新安装步骤
  • 打开与关闭光驱怎么设置
  • windows怎么加速
  • win10系统d盘变成e盘,进入winpe盘符正常
  • windows mobile
  • linux如何修改网关地址
  • Tutorial 3: First Triangle
  • cocos2d js教程
  • 导入extjs、jquery 文件时$使用冲突问题解决方法
  • 使用jquery实现的项目
  • Unity WWW网络动态加载和储存在本地
  • 实用的批处理
  • 电子税务局实名认证
  • 福建省国税局电话号码
  • 双定户如何网上申报
  • 两江新区两江大道航空航天产业园
  • 北京税务稽查局网站
  • 保税区企业会有两个海关编码吗
  • 西安个人完税证明怎么开
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设