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

  • 居民个人的综合所得
  • 税务师考试给个税表吗
  • 房产税土地使用税新政策消息2023
  • 新准则下对亏损的规定
  • 化粪池合同书
  • 城建税计提与缴纳分录
  • 电子发票可以更改备注吗
  • 个人房贷利息抵税
  • 在公司交社保不满十年,女性按照什么退税
  • 政府收回土地使用权
  • 卖胶卷的店
  • 房产证印花税如何计算
  • 工会经费拨缴是什么意思
  • 应纳税所得额的计算公式
  • 支付税点怎么做账
  • 收到子公司非货币资产分配账务处理
  • 劳保用品会计科目是什么
  • 行政事业单位培训伙食补助报销规定
  • 城建税漏报怎么办
  • 销售货物运费的增值税率
  • 小规模纳税人开专票税率是1%还是3%
  • 建筑服务税率是5
  • 借老板的现金存入银行怎么做账?
  • 库存与账面不符怎么办
  • 收到融资租赁利息专票进项税额要转出吗
  • 合同终止后发生的效果包括
  • win10系统下怎么安装Java JDK及配置环境变量
  • 昂达主板的组装视频
  • 手工明细分类账本怎么记
  • python中函数的可变参数有哪几种?各有什么特点?
  • mac怎么设置默认程序
  • 电脑每次开机都要按f1怎么解决
  • 投标保证金退回是什么意思
  • 电脑怎样设置共享文件夹
  • php最好的编程语言
  • cvpr2017最佳论文
  • 加拿大巨石
  • 排灯节起源
  • 公寓增值税税率是多少
  • 注销公司财务报表范本
  • 企业所得税年报截止日期2023
  • 工会经费是按应发工资还是实发工资申报
  • vue3使用ref获取元素
  • 餐饮业开具增值税专用发票
  • 研发和技术服务税率由6%变为3%
  • 审计招标费包含哪些内容
  • 什么时间可以开发票
  • sql server查询前1000条纪录
  • mongodb基础知识
  • 个体工商户具体工作内容怎么写
  • PostgreSQL教程(五):函数和操作符详解(1)
  • 消防预付款怎么做分录
  • 代扣款业务的处理方式
  • 永久性差异有哪些项目
  • 无票收入要交企业所得税吗
  • 生产企业免抵退是什么意思
  • 错账原因有哪些类型
  • 临时工工资应计入什么科目
  • 转出未交增值税借方余额表示什么
  • 企业运营工资
  • 职工薪酬怎么核算
  • 资产减值损失审计程序是什么
  • mysql备份与恢复数据库
  • u盘装win8系统教程图解
  • svchost进程可以结束吗
  • Ubuntu系统怎么设置IP
  • 怎么用macbook
  • win10周年版
  • win10隐藏图标不显示
  • unity屏幕截图
  • 请问在javascript程序中
  • android调用相机闪退
  • jquery get(0)
  • js如何深度克隆一个对象
  • python算法的应用
  • unity引擎叫什么
  • Python常见格式化字符串方法小结【百分号与format方法】
  • 变更主管税务机关需要注销吗
  • 深圳国税系统
  • 云南税收主要经济来源
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设