位置: IT常识 - 正文

深究Python中的asyncio库-线程同步

编辑:rootadmin

推荐整理分享深究Python中的asyncio库-线程同步,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

前面的代码都是异步的,就如sleep,需要用asyncio.sleep而不是阻塞的time.sleep,如果有同步逻辑,怎么利用asyncio实现并发呢?答案是用run_in_executor。在一开始我说过开发者创建 Future 对象情况很少,主要是用run_in_executor,就是让同步函数在一个执行器( executor)里面运行。

深究Python中的asyncio库-线程同步

同步代码

defa():time.sleep(1)return'A'asyncdefb():awaitasyncio.sleep(1)return'B'defshow_perf(func):print('*'*20)start=time.perf_counter()asyncio.run(func())print(f'{func.__name__}Cost:{time.perf_counter()-start}')asyncdefc1():loop=asyncio.get_running_loop()awaitasyncio.gather(loop.run_in_executor(None,a),b())In:show_perf(c1)********************c1Cost:1.0027242230000866

可以看到用run_into_executor可以把同步函数逻辑转化成一个协程,且实现了并发。这里要注意细节,就是函数a是普通函数,不能写成协程,下面的定义是错误的,不能实现并发:

asyncdefa():time.sleep(1)return'A'

因为 a 里面没有异步代码,就不要用async def来定义。需要把这种逻辑用loop.run_in_executor封装到协程:

asyncdefc():loop=asyncio.get_running_loop()returnawaitloop.run_in_executor(None,a)

大家理解了吧?

loop.run_in_executor(None, a)这里面第一个参数是要传递concurrent.futures.Executor实例的,传递None会选择默认的executor:

In:loop._default_executorOut:<concurrent.futures.thread.ThreadPoolExecutorat0x112b60e80>

当然我们还可以用进程池,这次换个常用的文件读写例子,并且用:

asyncdefc3():loop=asyncio.get_running_loop()withconcurrent.futures.ProcessPoolExecutor()ase:print(awaitasyncio.gather(loop.run_in_executor(e,a),b()))In:show_perf(c3)********************['A','B']c3Cost:1.0218078890000015
本文链接地址:https://www.jiuchutong.com/zhishi/303151.html 转载请保留说明!

上一篇:python中series如何转为list?(python的series)

下一篇:vant 的表单校验(vant表单验证并提交表单)

  • 只有增值税专用发票才能抵扣进项吗
  • 还有什么技术
  • 代扣个税怎么做凭证
  • 个人所得税申报截止时间
  • 红字发票开错了已上传如何作废
  • 分公司与总公司的法律关系
  • 用友u8如何计提折旧生成凭证
  • 公司奖金没有按时发可以要吗
  • 个人独资企业处罚听证的标准
  • 收到低值易耗品的专票但未付款
  • 外经证提交一般要多久可以通过
  • 现金抵用券购买怎么用
  • 应交增值税为什么是销项减进项
  • 退货的产品会重新包装吗
  • 房地产商品房销售营业税怎么算
  • 财政拨款进项税怎么处理
  • 商砼税率是多少?
  • 2018一般纳税人印花税减半吗
  • 纳税人跨县(市、区)提供建筑服务
  • 已抵扣发票丢失如何处理
  • 制造费用计入期间费用吗
  • 个税本期收入是应发还是实发
  • 带销货清单的专票咋红冲
  • 利润分配表会计分录
  • 长期股票期权的会计分录怎么做?
  • applepay怎么用云闪付
  • 从银行提取备用金填制什么凭证
  • 股东实缴出资的证明
  • 向银行借入长期借款50万元
  • 公司培训赔偿
  • php零基础入门
  • PHP:json_last_error_msg()的用法_JSON函数
  • 员工离职后公司还用照片
  • 库存盘点差异会计分录
  • 什么是企业最佳融资方式
  • 折扣额在备注栏
  • 企业购入设备涉及的税种
  • 资产减值损失影响当期利润吗
  • php curl 封装
  • WP Smart Preloader 为你的WordPress添加预加载动画
  • 应付职工薪酬账户
  • 在职工教育经费包括哪些
  • 公允价值变动收益是指什么
  • 招待客户住宿费进项税可以抵扣吗
  • 购买工业用地
  • 增值税不含税销售额填在哪里
  • erp用友u8操作教程
  • sqlserver启动不起来
  • 年末已经结账了怎么入账
  • 应付职工薪酬包含哪些科目
  • 发票种类包括
  • 企业收到宣传费怎么做账
  • 未认证的进项税发票入账
  • 记账凭证的编制依据是审核无误的原始凭证
  • 小规模减免税收入
  • 外购材料的核算方法有
  • 企业亏损应纳税所得额怎么填
  • 工程担保属于什么
  • 制造费用不结转成本 报表平吗
  • linux系统基本指令
  • Win8.1 VPN设置功能提示连接出错的简单解决方法
  • linux dd 系统
  • shutdown /f
  • centos6.6网络配置
  • win7磁盘c满了怎么办却又分不清哪些是该删除
  • 水下摄影技巧
  • rgb颜色相加
  • jquery自动完成插件
  • ie不支持p标签
  • node.js deno
  • android设置hint颜色
  • js移动端拖拽
  • 轮播图简单实现
  • jquery查找节点
  • 沈阳车辆税务管理局电话
  • 山西税务官网登录
  • 北京地税咨询热线
  • 企业所得税年度申报时间
  • 国办函和国办发
  • 合肥哪里可以注销电信卡
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设