位置: 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表单验证并提交表单)

  • 租车怎么缴纳罚款
  • 现金流量净额正负
  • 营业外收入缴纳税款
  • 从事小额零星经营业务的个人是指
  • 500元以内的商品都有哪些
  • 记载资金的账簿要交印花税吗
  • 少收的应收和应付账款怎么处理?
  • 非货币性资产交换的记忆口诀
  • 银行付款退回重新开户
  • 样品不收钱怎么做会计分录
  • 纳税调整的情况
  • 核定征收未分配利润分红分录
  • 201金8税盘抵扣期限是多久?
  • 研发支出资本化的条件
  • 专票电话写错了怎么办
  • 借给其他企业的钱计入什么科目
  • 小规模保安公司收取服务费时如何开票
  • 如何在excel中添加多行空白
  • 企业取得财政拨款怎么算
  • php imagecreatetruecolor 创建高清和透明图片代码小结
  • 2017年新准则下,收入确认的金额应是
  • pniopcac.exe是什么进程
  • 新成立的公司要年报吗?
  • vue public assets
  • 计提的福利费怎么处理
  • 微信公众号php开发教程
  • 论文 导论
  • php之间传递数据
  • man-s命令
  • python的顺序
  • 个体户发票没有开户行和账号行吗
  • 企业所得税中工资总额
  • 对公账户原路退回
  • 公司为员工代扣代缴
  • 勾选认证发票的时候找不到这张发票号码怎么办
  • 收款收据可以盖业务章吗
  • 个人收入如何开出发票
  • 哪些属于政府机关单位
  • SQLServer2005与SQLServer2008数据库同步图文教程
  • 管理费用科目包括
  • 增值税减免税申报表
  • 子公司没有收入,只有费用如何企业所得税汇算清缴
  • 现金日记账每月都要写期初余额吗
  • 房产契税什么时候退税
  • 公司购买的家电怎么入账
  • 现金冲账是什么意思
  • 公司向个人借款利息可以税前扣除吗
  • 信用代码证过期了6年怎么办理
  • 房地产会计如何报税
  • sql语句排除重复数据
  • rsyslog 8.11.0 (v8-stable) 发布
  • 证书登录什么意思
  • ghost还原文件
  • rhel6安装
  • 重装系统要注意哪些
  • linux中使用grep命令显示包含特殊字符的行
  • windows无法完成配置若要尝试恢复配置
  • xp电脑注册表怎么打开
  • Linux常用命令的实验总结
  • 安装和配置eclipse集成开发环境
  • Windowsxp桌面没有图标怎么办
  • win10用360卫士好吗
  • linux doc
  • 怎么使用linux
  • win10系统语言包安装方法
  • win10怎么将桌面图标变小
  • 用jQuery实现可输入多选下拉组合框实例代码
  • android游戏开发框架
  • dos echo命令
  • cocos2dx游戏开发
  • unity3d入门视频教程
  • unity获取手机型号
  • unitysdk接入
  • unity2020怎么导入资源
  • python连接mq
  • 开发笔记本哪个比较好一点
  • 税务分局是什么意思
  • 非涉密网络严禁什么
  • 土地增值税优惠政策办理流程和手续方面的精简措施
  • 税务师事务所企业组织架构
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设