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

  • 小米10大概多久能充满电(小米大概多久降价)

  • vivo外部来源安装如何关闭验证(vivo外部来源应用安装)

  • 咪咕盒子复位键在哪(咪咕盒子怎么恢复原厂系统)

  • 改过一次快手号还想改怎么办(快手号改了一次怎么样再改)

  • 为什么我的微信健康码显示不出来(为什么我的微信没有零钱通)

  • 腾讯会议能回放视频吗(腾讯会议录屏转文字)

  • hdmi接口可以外接什么设备(hdmi接口可以外接显示器吗)

  • 段后20磅怎么设置(段后设置12磅)

  • 快手b类多久能恢复(快手b类多久能上热门啊)

  • 淘宝三星要多少分(淘宝三星要多少评价)

  • windows10更新失败是怎么回事(windows10更新失败缺少重要的修复)

  • 打印机扫描分辨率多少合适(打印机扫描分辨率1200*1200清晰吗)

  • 电脑复制全选按什么键(电脑复制全选快捷键是什么)

  • 学习机可以下载钉钉吗

  • 微信交易明细怎么打印(微信交易明细怎么导出excel)

  • 荣耀9x可以分屏吗(荣耀9x分屏变成了浮窗)

  • 乘车码可以刷多个人吗(乘车码可以刷多次吗)

  • 苹果8用不用贴膜(苹果8p是不是不需要贴膜)

  • ppt工具栏消失了如何解决(ppt里工具栏在哪里找)

  • 手机克隆为什么只显示旧手机(手机克隆为什么微信没有克隆过去)

  • 拼多多精选在哪里找(拼多多精选推荐在哪里找)

  • 华为手机屏幕上的悬浮球怎么取消(华为手机屏幕上的小圆点怎么取消)

  • Windows搜索出现问题怎么办(windows搜索为什么那么慢)

  • 怎么用U盘装系统(怎么u盘装系统,u盘装系统教程图解)

  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设 电脑维修 湖南楚通运网络