专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

Python让程序轻松加速的方法

  最近,我读了一篇有趣的文章,文中介绍了一些未充分使用的Python特性的。在文章中,作者提到,从Python3。2开始,标准库附带了一个内置的装饰器functools。lrucache。我发现这个装饰器很令人兴奋,有了它,我们有可能轻松地为许多应用程序加速。
  你可能在想,这很好,但这个装饰器究竟是什么?它提供对已构建的缓存的访问,该缓存使用LRU(译者注:LeastRecentlyUsed的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰。)的置换策略,因此被命名为lrucache。当然,这句话听起来可能有点令人胆怯,所以让我们把它分解一下。什么是缓存?
  缓存是一个可以快速访问的地方,可以在它里面存储访问速度较慢的内容。为了演示这一点,让我们以你的web浏览器为例。
  从网络上读取网页可能需要几秒钟,即使是快速的网络连接也如此。在计算机时代,这个问题是永恒的。为了解决这个问题,浏览器将你已经访问过的网页存储在计算机的缓存中,这样访问速度会加快数千倍。
  使用缓存下载网页的步骤如下:检查页面的本地缓存。如果页面在那里,返回该页面。在因网上找到网页并从那里下载。将该网页存储在缓存中,以便将来更快地访问。
  虽然缓存并不会让你第一次访问网页的速度加快,但通常你是要屡次访问某一个网站页面的(想想Facebook注:对多数国人来讲,可能不是这个网站,或者你的电子邮件),有了缓存之后,以后每次访问都会更快。
  浏览器并不是唯一使用缓存的,从服务器到CPU和硬盘或SSD之间的计算机硬件,它们无处不在。从缓存中可以很快地获取数据,因此当你不止一次获取数据时,它可以大大加快程序的速度。LRU是什么意思?
  缓存只能存储有限数量的东西,而且通常它比可能存入所缓存的东西要小得多(例如,你的硬盘比互联网小得多)。这意味着有时需要将缓存中已有内容替换掉,放入其他内容。对于去掉什么的决策方法被称为置换策略。
  这就是LRU的用武之地。LRU代表最近用得最少的缓存中内容,这是一种常用的缓存置换策略。
  为什么置换策略很重要?
  最近使用最少这种置换策略的基本思想是:如果你有一段时间没有访问过某个东西,你可能近期不会访问它。要使用此策略,只需在缓存已满时删除最早使用的项即可。
  在上图中,缓存中的每个项都附带了访问时间。依据LRU策略,选择访问时间为2:55PM的项作为要置换的项,因为它是最早被访问的。如果有两个对象具有相同的访问时间,那么LRU将从中随机选择一个。
  这种去掉长时间不用的东西的策略,被称为Bldy的最优算法,它是置换缓存内容的最佳策略。当然,我们根本不知道未来会有什么操作。谢天谢地,在许多情况下,LRU提供了近乎最佳的性能。怎样使用它?
  functools。lrucache是一个装饰器,因此你可以将它放在函数的顶部:importfunctoolsfunctools。lrucache(maxsize128)deffib(n):ifn2:return1returnfib(n1)fib(n2)
  Fibonacci数列在递归示例中经常被用到,要提升这个函数的速度,使用functools。lrucache之后,不费吹灰之力,就能让这个递归函数狂飙。在我的机器上运行这些代码,得到了这个函数有缓存版本和没有缓存版本的以下结果。python3mtimeitsfromfibtestimportfibfib(30)10loops,bestof3:282msecperlooppython3mtimeitsfromfibtestimportfibcachefibcache(30)10000000loops,bestof3:0。0791usecperloop
  增加一行代码之后,速度提高了3565107倍。
  当然,我认为很难看出你在实际中会如何使用它,因为我们很少需要计算斐波那契数列。回到web页面示例,我们可以举一个更实际的用缓存渲染前端模板的例子。
  在服务器开发中,通常单个页面存储为具有占位符变量的模板。例如,下面是一个页面模板,该页面显示某一天各种足球比赛的结果。htmlbodyh1Matchesfor{{day}}h1tableidmatchestrtdHometeamtdtdAwayteamtdtdScoretdtr{formatchinmatches}trtd{{match〔home〕}}tdtd{{match〔away〕}}tdtd{{match〔homegoals〕}}{{match〔awaygoals〕}}tdtr{endfor}tablebodyhtml
  呈现模板时,看起来如下所示:
  这是缓存的主要目标,因为每天的结果不会改变,而且很可能每天会有多次访问。下面是一个提供此模板的Flask应用程序。我引入了50ms的延迟来模拟通过网络或者从大型数据库获取匹配字典。importjsonimporttimefromflaskimportFlask,rendertemplateappFlask(name)withopen(match。json,r)asf:matchdictjson。load(f)defgetmatches(day):simulatenetworkdatabasedelaytime。sleep(0。05)returnmatchdict〔day〕app。route(matchesday)defshowmatches(day):matchesgetmatches(day)returnrendertemplate(matches。html,matchesmatches,dayday)ifnamemain:app。run()
  使用requests在不缓存的情况下获得三天的数据,在我的计算机上本地运行平均需要171ms。这还不错,但我们可以做得更好,即使考虑到人为的延迟。app。route(matchesday)functools。lrucache(maxsize4)defshowmatches(day):matchesgetmatches(day)returnrendertemplate(matches。html,matchesmatches,dayday)
  在本例中,我设置了maxsize4,因为我的测试脚本只有相同的三天,最好设置2次幂。使用这种方法,10个循环的平均速度可以降到13。7ms。还有什么应该知道?
  Python文档虽然很详细,但是有一些东西还是要强调的。内置函数
  装饰器附带了一些很有用的内置函数。cacheinfo()返回访问数(hits)、未访问数(misses)和当前缓存使用量(currsize)、最大容量(maxsize),帮助你了解缓存使用情况。cacheclear()将删除缓存中的所有元素。有时候不要使用缓存
  通常,只有在以下情况下才能使用缓存:在缓存期内,数据不会更改。函数将始终为相同的参数返回相同的值(因此时间和随机对缓存没有意义)。函数没有副作用。如果缓存被访问,则永远不会调用该函数,因此请确保不更改其中的任何状态。函数不返回不同的可变对象。例如,返回列表的函数不适合缓存,因为将要缓存的是对列表的引用,而不是列表内容。

科莫多巨蜥的毒液到底有多可怕?2009年,一名31岁的渔民安瓦尔,在印尼科莫多岛上采摘水果,结果不小心从水果树上掉了下来,刚好踩到了一只巨型蜥蜴,蜥蜴瞬间就朝他扑了过去,咬住了他的腿,之后又咬住了他的手臂,身体武汉未来的房价会涨到100000元平米吗?这个问题的答案是肯定的!以目前的趋势,未来武汉房价必然达到10万的水平,只是时间长短的问题。2010年至2017年,短短七年间,武汉的房价已经翻了3番,目前,武汉部分高端楼盘如洞庭兰州青白石片区,中央公园怎么样?兰州北拓的黄金区域,目前基础交通还跟不上建设需要,交通滞后可能会成为十四五期间兰州青白石片区发展的的最大障碍!不过就兰州地理位置和城区格局而言,青白石片区是离主城区最近的待开发区域农民为什么不在国家统计失业范围之内?中国有四个儿子,大儿子叫工人,二儿子叫子弟兵,三儿子叫公务员,四儿子叫农民,所以四儿子就没有纳入统计失业包括养老金范围,因为四儿子有金山银山还有三分地。农民有土地,这是农民可以赖以农村成立社区是什么意思?很多农村驻有村委会办公室,同时也驻有社区管理委员会办公室,特别是在城市郊区的农村和街道的农村都同时设立了村委会和社区管理委员会,很多人弄不明白是怎么回事。那农村成立社区是什么意思呢农村里的剩男,为何一剩再剩呢?到底是什么原因?男女比例失调。计划生育只要一个孩子时,受封建思想影响,都拚命要男孩,等他们长大了,很难找到媳妇。一,农村姑娘远嫁,二,女孩见少,三,彩礼高,四,剩男挣钱少。我就一大龄剩男!个人亲身抖音付费直播试水,看直播要给钱了?我们应该如何思考?使劲收,最好是家人们看的话,一分钟100块钱。毕竟粉丝听话的很。毕竟人设都设计好了打PK,卖货摆错价格,怒亏2个亿回馈粉丝。没事就怼工厂,怼员工反正就是赔钱回馈粉丝。赔完还得补交税马上就要退休了,退休工资才3650元太少了,怎么办?3600不少了。我企业工龄32年,退休时退休金只有2200,涨了这么多年还不到3000。知足常乐吧!如果身体不好,这些钱也够生活了,如果身体还可以,就找一些力所能及的工作,打打工补南宁五象新区未来的发展潜力很大吗?五象新区无法成为国家级新区!!!目前看来,五象新区的潜力也就这样了。我们对比一下贵阳的贵安新区,贵安新区的面积是1700平方公里,由贵阳市的郊区和安顺市合并得来。是全国第8个国家级如果把三峡大坝加高10米,截留更多的洪水,可行吗?我国的三峡大坝,作为当今世界上最大的水利枢纽工程,位于湖北省宜昌市上游,距下游葛洲坝水电站38公里,三峡大坝全长2309米高185米,呈梯形形状,集发电旅游航运调控洪水于一身。三峡大家有经历过亲人去世吗?是怎样走出痛苦和想念的?2018年9月1日下午3点8分,我的妻子在医院里停止了呼吸。她的眼睛没有闭上,我流着泪,帮她合上了双眼。我永远失去了我最亲近的爱人,孩子永远的失去了妈妈。一位好妻子,好女儿,好姑妈
自酿白酒怎样勾兑口感好?现在很多朋友都自己在家里酿造白酒,也就是从淘宝上购买一套设备自己酿酒。其实从2012年开始我就接触这一类酒类发烧友,因为很多专家一直在宣传一种观点自酿酒不健康。因为我个人属于酱香型祖爷爷兄妹三人,相继两个星期去世,整整28天全部去世了。你身边发生过这种事吗?朋友家兄妹四人都在一年去世,事先一点征兆都没有。朋友家一共兄妹6人,三男三女。从艰苦年代过来,过去一直互相邦扶,感情都挺热络。大姐年龄最大,近些年患脑病,神志不太清醒。二哥中风后遗杭州有没有较好的一本大学推荐?我考研打算去杭州,但是不了解那里有什么一本大学,可以给点建议吗?浙江共有19所一本大学,名单分别为杭州电子科技大学浙江工商大学杭州师范大学浙江理工大学温州医科大学浙江财经大学浙江中医药大学绍兴文理学院等,具体完整大学名单见下表。浙江一本大学名单滨州游玩有哪些景区值得一去?滨州有着悠久的历史文化,是旅游非常值得去玩的地方,今天国看说就和大家分享一下去滨州有哪些好玩的地方NO。1邹平鹤伴山4A级风景区,主要景观有英雄石碧血潭水帘洞鹤鸣谷等,放松,看景是微信里的朋友离世,你知道的情况下会删除该朋友的微信号吗?微信里的朋友离世,你知道的情况下会删除该朋友的微信号吗?朋友去世后微信要不要删除,这不是一个道德绑架的话题,取决于每个人自己的选择。对于我们一些上了年纪的老者而已,不会选择删除他她网贷信用卡共欠20万怎么还?没上岸呢,正在煎熬中。不过建议你先还信用卡,其次上征信的网贷,最后还不上征信的。加油握手我来回答,一般包涵信用卡信用卡包涵的各种现金贷还有各种app的网贷这三种情况,一是信用卡可以信用卡被同学借去套现,不好意思提出要回,怎么办?信用卡被同学借走套现,不好意思要回,还能怎么办呢?打肿脸充胖呗,他套了现,你来还呗!面子可不是什么好东西?最好丢掉!赶紧要回来,这等于他拿你的钱在花,他好意思花你的血汗钱你怎么就不如何才能考上军校?作为曾经的军校内部人士,我简单介绍一下进入军校的途经。高考首先说明不是所有的军校都可以通过高考进入的,比如国防大学等属于培养高级干部的院校高考是不可以直接报考的,可以报考的我都在下怎么判断肝硬化早中晚期?肝硬化在不做任何干预措施的情况下,其自然发展史,是从没有症状的代偿期逐渐进展至有明显临床症状的失代偿期。最常见的表现是腹水出血肝昏迷和黄疸。所以,从临床医生的角度来看,肝硬化只分两斑是病吗?哪些人容易长斑?由于长期不健康的生活规律和饮食习惯,越来越多的年轻女性被斑点纠缠上,或者黑色素沉积太多,成为潜在的黄褐斑患者。黄褐斑是一种很令人苦恼的脸部皮肤状态,刚刚开始长的时候只是淡淡的一些痕预算20W,男女都能开的车有哪些?1先推荐一下自主品牌,传祺GS8,第一是支持民族企业,其次这款车无论从外形配置空间都很不错,近两个月销量也不错,可以考虑一下。2合资品牌首先推荐日产奇骏,20万可以中配落地了,全景
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网