位置: IT常识 - 正文

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

发布时间:2024-01-20

推荐整理分享深究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表单验证并提交表单)

  • 综合保税区是什么意思,举个例子
  • 增值税普票没有税号可以开吗
  • 金税四期正式启动
  • 股权转让实缴和认缴的区别
  • 行政职工福利费包括哪些内容呢
  • 咨询服务费开票税率
  • 广告策划费会计分录
  • 转登记小规模纳税人转让固定资产
  • 叉车需要购置税吗
  • 普通发票为什么没有章
  • 有哪些税收政策类型
  • 税收制度具体内容
  • 固定资产处置的增值税税率
  • 发出材料计划成本例题
  • 企业清算时未抵扣的进项税账务处理
  • 公司没有收入算正常经营吗
  • 如何选一般纳税人还是小规模纳税人合作?
  • 汽修厂纳税多少
  • 长期待摊费忘记摊了怎么办
  • 记账凭证中借方和贷方什么意思
  • 记账凭证做完之后干什么
  • 公账转公账没有发票
  • 广告公司车身广告
  • 补交地税多少钱
  • 生产企业原材料的订购与运输建模
  • 鸿蒙系统快捷键
  • php中表单的使用
  • 小规模纳税人无法开具增值税专用发票
  • php防止再次刷新
  • PHP:mb_detect_encoding()的用法_mbstring函数
  • nbr是什么意思中文翻译
  • 项目部可以直接给工人结账吗
  • 踩坑视频
  • php生成时间戳
  • 阿里云onedata
  • vue3全局属性
  • 哈德良长城和中国长城的区别
  • php框架yii
  • 前端埋点sdk
  • yii2超好用的日期组件和时间组件
  • 公司可以不再提取法定公积金
  • docker部署架构图
  • thinkphp v5.0.24
  • 企业开具劳务费发票怎么开,税率多少
  • markdown小小白常用语法
  • 所有者权益期末余额-年初余额=净利润吗?
  • 城建税要计入税金及附加吗
  • 多计提的增值税怎么冲减
  • 即征即退的收入如何处理
  • SQL2005 自动备份的脚本
  • 所得税预缴怎么申报
  • 事业单位长期股权投资成本法和权益法
  • 售后回租服务费开票
  • 支付大型设备税率是多少
  • 交易费用计入何种科目
  • 交去年的企业所得税吗
  • 支出未取得发票
  • 固定资产清理的税率是多少
  • 贷款购车怎么做会计分录
  • mysql的union和union all
  • 如何设置微信语音来电铃声
  • win7系统连接VPN失败时提示错误代码721的故障分析及解决方法
  • win7系统文件夹怎么加密码
  • 软件无法卸载怎么办,安装的软件卸载不了怎么办
  • window扫雷游戏在哪里
  • mac怎么恢复出厂设置
  • win7系统桌面图标变大了怎样恢复
  • 在linux系统中,用来存放各种配置文件的目录
  • html模板 js
  • django中的model
  • opengl怎么学
  • android
  • js如何显示日期和时间
  • nodejs中向HTTP响应传送进程的输出
  • javascript教学视频
  • 地税局上班时间是几点
  • 股权收购的好处
  • 汽车契税和购置税一样吗
  • 广东个体户年报微信申报
  • 济南市市中区二手房
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号