安庆大理运城常德铜陵江西
投稿投诉
江西南阳
嘉兴昆明
铜陵滨州
广东西昌
常德梅州
兰州阳江
运城金华
广西萍乡
大理重庆
诸暨泉州
安庆南充
武汉辽宁

Python性能提升神器!lrucache的介绍和讲解

11月11日 呛人心投稿
  一、前言
  我们经常谈论的缓存一词,更多的类似于将硬盘中的数据存放到内存中以至于提高读取速度,比如常说的redis,就经常用来做数据的缓存。Python的缓存(lrucache)是一种装饰在被执行的函数上,将其执行的结果缓存起来,当下次请求的时候,如果请求该函数的传参未变则直接返回缓存起来的结果而不再执行函数的一种缓存装饰器。
  那它和redis的区别在哪?有什么优势?怎么使用?下面为你讲解二、举例说明
  1。现在我们先不使用缓存来写一个求两数之和的函数,并调用执行它两次:deftest(a,b):print(开始计算ab的值。。。)returnabprint(12等于:,test(1,2))print(12等于:,test(1,2))
  执行结果开始计算ab的值。。。12等于:3开始计算ab的值。。。12等于:3
  可以看到test被执行了两次,现在我们加上缓存再进行执行:fromfunctoolsimportlrucachelrucachedeftest(a,b):print(开始计算ab的值。。。)returnabprint(test(1,2))print(test(1,2))
  执行结果开始计算ab的值。。。12等于:312等于:3
  可以看到test函数只被执行了一次,第二次的调用直接输出了结果,使用了缓存起来的值。
  2。当我们使用递归求斐波拉契数列(斐波那契数列指的是这样一个数列:0,1,1,2,3,5,8,它从第3项开始,每一项都等于前两项之和)的时候,缓存对性能的提升就尤其明显了:
  不使用缓存求第40项的斐波拉契数列importdatetimedeffibonacci(num):不使用缓存时,会重复执行函数returnnumifnum2elsefibonacci(num1)fibonacci(num2)startdatetime。datetime。now()print(fibonacci(40))enddatetime。datetime。now()print(执行时间,endstart)
  执行时间执行时间0:00:29。004424
  使用缓存求第40项的斐波拉契数列:lrucachedeffibonacci(num):不使用缓存时,会重复执行函数returnnumifnum2elsefibonacci(num1)fibonacci(num2)
  执行时间执行时间0:00:00
  两个差距是非常明显的,因为不使用缓存时,相当于要重复执行了很多的函数,而使用了lrucache则把之前执行的函数结果已经缓存了起来,就不需要再次执行了。三、lrucache用法1。参数详解
  查看lrucache源码会发现它可以传递两个参数:maxsize、typed:deflrucache(maxsize128,typedFalse):Leastrecentlyusedcachedecorator。IfmaxsizeissettoNone,theLRUfeaturesaredisabledandthecachecangrowwithoutbound。。。。1)maxsize
  代表被lrucache装饰的方法最大可缓存的结果数量(被装饰方法传参不同一样,则结果不一样;如果传参一样则为同一个结果),如果不指定传参则默认值为128,表示最多缓存128个返回结果,当达到了128个时,有新的结果要保存时,则会删除最旧的那个结果。如果maxsize传入为None则表示可以缓存无限个结果;2)typed
  默认为false,代表不区分数据类型,如果设置为True,则会区分传参类型进行缓存,官方是这样描述的:
  如果typed为True,则将分别缓存不同类型的参数,例如,f(3。0)和f(3)将被视为具有明显的结果。
  但在python3。9。8版本下进行测试,typed为false时,按照官方的测试方法测试得到的还是会被当成不同的结果处理,这个时候typed为false还是为true都会区别缓存,这与官方文档的描述存在差异:fromfunctoolsimportlrucachelrucachedeftest(a):print(函数被调用了。。。)returnaprint(test(1。0))print(test(1))
  执行结果函数被调用了。。。1。0函数被调用了。。。1
  但如果是多参数的情况下,则会被当成一个结果:fromfunctoolsimportlrucachelrucachedeftest(a,b):print(函数被调用了。。。)returna,bprint(test(1。0,2。0))print(test(1,2))
  执行结果函数被调用了。。。(1。0,2。0)(1。0,2。0)
  这个时候设置typed为true时,则会区别缓存:fromfunctoolsimportlrucachelrucache(typedTrue)deftest(a,b):print(函数被调用了。。。)returna,bprint(test(1。0,2。0))print(test(1,2))
  执行结果函数被调用了。。。(1。0,2。0)函数被调用了。。。(1,2)
  当传参个数大于1时,才符合官方的说法,不清楚是不是官方举例有误2。lrucache不支持可变参数
  当传递的参数是dict、list等的可变参数时,lrucache是不支持的,会报错:fromfunctoolsimportlrucachelrucachedeftest(a):print(函数被执行了。。。)returnaprint(test({a:1}))
  报错结果TypeError:unhashabletype:dict四、lrucache与redis的区别
  缓存缓存位置是否支持可变参数是否支持分布式是否支持过期时间设置支持的数据结构需单独安装redis缓存在redis管理的内存中是是是支持5种数据结构是lrucache缓存在应用进程的内存中,应用被关闭则被清空否否否字典(参数为:key,结果为:value)否五、总结
  经过上面的分析,lrucache功能相对于redis来说要简单许多,但使用起来更加方便,适用于小型的单体应用。如果涉及的缓存的数据种类比较多并且想更好的管理缓存、或者需要缓存数据有过期时间(类似登录验证的token)等,使用redis是优于lrucache的。
投诉 评论 转载

摄影穷三代,单反毁一生,单反如何选配镜头?谢谢邀请!单反穷三代实际上是摄影爱好者的自嘲,当不得真的。相比之下,摄影作为一种爱好,烧钱要远远低于其他爱好,何况这个爱好还不是不良爱好,拍拍风景、拍拍花草、拍拍家……苹果iPhone14Pro仍将采用Lightning接口鞭牛士4月18日消息,据站长之家援引外媒消息,苹果将继续在其旗舰iPhone14Pro使用10年前的Lightning接口之后,直到它转向通过MagSafe传输数据的无接口全无……股市投资日志大A日记美东周四,美股三大指数全线收跌,道指跌0。33,纳指跌2。14,标普跌1。21;大型科技股集体下跌,特斯拉跌超3,苹果收跌3,亚马逊、Meta、谷歌、微软、奈飞均……实时显示车位剩余数量朝阳重点商圈2。7万余个停车位数据接入高北京商报讯(记者杨月涵)4月11日,记者自朝阳区获悉,日前,位于朝阳区的北京CBD、蓝色港湾、合生汇等重点商圈41个停车场2。7万余个停车位的数据接入高德地图,地图上可实时显示……我想买VIVO手机,价格在25003000哪个型号好?最近vivo有刚发布了一款新全面屏手机,有个6GB64GB版本的vivoX21的售价为2898元,也是一个很不错的选择。作为新推出的手机,在各方面的表现还是相当强势的,首先说说……未来发展最有前景的方向,在互联网,在线上,微商,电商,抖商,电商平台经济已然是重要经济部分,平台、电商为人们的生活带来了很大便利和实惠,带来了网购新形态,也带来了很多新的法律问题。其中知识产权问题一直存在,从被漠视,到被认识,到被重视,……Python性能提升神器!lrucache的介绍和讲解一、前言我们经常谈论的缓存一词,更多的类似于将硬盘中的数据存放到内存中以至于提高读取速度,比如常说的redis,就经常用来做数据的缓存。Python的缓存(lrucach……智能语音控制护眼台灯在智能照明的市场上,竞争激烈,各种新鲜产品接踵而来,想要在从多产品中脱颖而出,还需要一些更加智能与便捷的产品作为先锋军,从人群中杀出一条路来。传声智能公司最近上新了一款智……从5988元跌至2989元,麒麟990徕卡四摄,华为旗舰二手愿意支持华为手机的消费者有很多,但是今年很多消费者也真的是有些无力支持华为了,因为今年华为公司的手机价格确实有些偏高,虽然华为公司因为被限制,今年所推出的手机基本都是4G机型,……果粉始料未及,iPhone14配置被砍外观无悬念,还是十三香虽然在性能上国产手机一直都不如苹果,但在快充发展领域苹果却落后太多,如今国产已经从120W升级到150W,可苹果依旧是20W,可见差距之大。不过意想不到的是,国产首款150W快……浅谈知识图谱技术及其应用补全前言及背景:在构建知识图谱的过程中,大量知识信息来源于文档和网页信息,在从文档提取知识的过程中往往会有偏差,这些偏差来自于看两方面:(1)文档中会有很多噪声信息,即无用信……整个宇宙都比不上一个葛立恒数吗,葛立恒数有这么大吗,大到什么葛立恒数有多大?举个例子:如果宇宙中所有物质和非物质的每一个原子从宇宙诞生开始就一直同时不断说000000000一直说到宇宙毁灭,然后在这些0前面再加一个1,这个数字够大了吧?……
2022年性价比最高的手机推荐(20003000元)线上医生软件小程序专业开发线上医生软件专业团队定制开发那些年消失的国产手机品牌,你们知道吗?外媒透露AppleWatchS7屏幕将提升至1。9英寸?苹果谷歌亚马逊已将Matter智能家居标准的发布推迟至202小米用不用华为鸿蒙,谷歌说的算?两部门在5G千兆光网等领域布局一批新型基础设施项目确认了!iPhone13最大的卖点,严重翻车BW2021火爆开启,华硕WiFi6多款二次元新品燃爆全场华为matebooke好吗?3月即将发布的四款给力新机,有你期待的吗?官宣!10月13日1900三星W225G将在杭州大剧院发布我那难忘的儿童节作文世界dj排行榜,2019年世界百大DJ排名新鲜出炉古今医案研读黄文东治胃小弯溃疡案(辛开苦泄,化瘀止痛)离婚时该怎样争夺小孩的抚养权学会照顾自己作文抹不去的真情作文700字这就是我老妈男女分居两地遇到难以抗拒的诱惑夏日深居二首其二我的想象力作文可爱儿童房装修设计效果图欣赏

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找七猫云易事利