范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

Python让程序轻松加速的方法

  最近,我读了一篇有趣的文章,文中介绍了一些未充分使用的Python特性的。在文章中,作者提到,从Python 3.2开始,标准库附带了一个内置的装饰器functools.lru_cache。我发现这个装饰器很令人兴奋,有了它,我们有可能轻松地为许多应用程序加速。
  你可能在想,这很好,但这个装饰器究竟是什么?它提供对已构建的缓存的访问,该缓存使用LRU(译者注: Least Recently Used的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰。)的置换策略,因此被命名为lru_cache。当然,这句话听起来可能有点令人胆怯,所以让我们把它分解一下。什么是缓存?
  缓存是一个可以快速访问的地方,可以在它里面存储访问速度较慢的内容。为了演示这一点,让我们以你的web浏览器为例。
  从网络上读取网页可能需要几秒钟,即使是快速的网络连接也如此。在计算机时代,这个问题是永恒的。为了解决这个问题,浏览器将你已经访问过的网页存储在计算机的缓存中,这样访问速度会加快数千倍。
  使用缓存下载网页的步骤如下:检查页面的本地缓存。如果页面在那里,返回该页面。在因网上找到网页并从那里下载。将该网页存储在缓存中,以便将来更快地访问。
  虽然缓存并不会让你第一次访问网页的速度加快,但通常你是要屡次访问某一个网站页面的(想想Facebook——注:对多数国人来讲,可能不是这个网站,或者你的电子邮件),有了缓存之后,以后每次访问都会更快。
  浏览器并不是唯一使用缓存的,从服务器到CPU和硬盘或SSD之间的计算机硬件,它们无处不在。从缓存中可以很快地获取数据,因此当你不止一次获取数据时,它可以大大加快程序的速度。LRU是什么意思?
  缓存只能存储有限数量的东西,而且通常它比可能存入所缓存的东西要小得多(例如,你的硬盘比互联网小得多)。这意味着有时需要将缓存中已有内容替换掉,放入其他内容。对于去掉什么的决策方法被称为置换策略。
  这就是LRU的用武之地。LRU代表最近用得最少的缓存中内容,这是一种常用的缓存置换策略。
  为什么置换策略很重要?
  "最近使用最少"这种置换策略的基本思想是:如果你有一段时间没有访问过某个东西,你可能近期不会访问它。要使用此策略,只需在缓存已满时删除最早使用的项即可。
  在上图中,缓存中的每个项都附带了访问时间。依据LRU策略,选择访问时间为2:55PM 的项作为要置换的项,因为它是最早被访问的。如果有两个对象具有相同的访问时间,那么LRU将从中随机选择一个。
  这种去掉长时间不用的东西的策略,被称为Bélády的最优算法,它是置换缓存内容的最佳策略。当然,我们根本不知道未来会有什么操作。谢天谢地,在许多情况下,LRU提供了近乎最佳的性能。怎样使用它?
  functools.lru_cache是一个装饰器,因此你可以将它放在函数的顶部:import functools  @functools.lru_cache(maxsize=128) def fib(n):   if n < 2:     return 1   return fib(n-1) + fib(n-2)
  Fibonacci数列在递归示例中经常被用到,要提升这个函数的速度,使用functools.lru_cache之后,不费吹灰之力,就能让这个递归函数狂飙。在我的机器上运行这些代码,得到了这个函数有缓存版本和没有缓存版本的以下结果。$ python3 -m timeit -s "from fib_test import fib" "fib(30)" 10 loops, best of 3: 282 msec per loop  $ python3 -m timeit -s "from fib_test import fib_cache" "fib_cache(30)" 10000000 loops, best of 3: 0.0791 usec per loop
  增加一行代码之后,速度提高了3565107倍。
  当然,我认为很难看出你在实际中会如何使用它,因为我们很少需要计算斐波那契数列。回到web页面示例,我们可以举一个更实际的用缓存渲染前端模板的例子。
  在服务器开发中,通常单个页面存储为具有占位符变量的模板。例如,下面是一个页面模板,该页面显示某一天各种足球比赛的结果。        

Matches for {{day}}

{% for match in matches %} {% endfor %}
Home team Away team Score
{{match["home"]}} {{match["away"]}} {{match["home_goals"]}} - {{match["away_goals"]}}
  呈现模板时,看起来如下所示:   这是缓存的主要目标,因为每天的结果不会改变,而且很可能每天会有多次访问。下面是一个提供此模板的Flask应用程序。我引入了50ms的延迟来模拟通过网络或者从大型数据库获取匹配字典。import json import time from flask import Flask, render_template app = Flask(__name__) with open("match.json","r") as f: match_dict = json.load(f) def get_matches(day): # simulate network/database delay time.sleep(0.05) return match_dict[day] @app.route("/matches/") def show_matches(day): matches = get_matches(day) return render_template("matches.html", matches=matches, day=day) if __name__ == "__main__": app.run()   使用requests在不缓存的情况下获得三天的数据,在我的计算机上本地运行平均需要171ms。这还不错,但我们可以做得更好,即使考虑到人为的延迟。 @app.route("/matches/") @functools.lru_cache(maxsize=4) def show_matches(day): matches = get_matches(day) return render_template("matches.html", matches=matches, day=day)   在本例中,我设置了maxsize=4,因为我的测试脚本只有相同的三天,最好设置2次幂。使用这种方法,10个循环的平均速度可以降到13.7ms。还有什么应该知道?   Python文档虽然很详细,但是有一些东西还是要强调的。内置函数   装饰器附带了一些很有用的内置函数。cache_info()返回访问数(hits)、未访问数(misses)和当前缓存使用量(currsize)、最大容量(maxsize),帮助你了解缓存使用情况。cache_clear()将删除缓存中的所有元素。有时候不要使用缓存   通常,只有在以下情况下才能使用缓存:在缓存期内,数据不会更改。函数将始终为相同的参数返回相同的值(因此时间和随机对缓存没有意义)。函数没有副作用。如果缓存被访问,则永远不会调用该函数,因此请确保不更改其中的任何状态。函数不返回不同的可变对象。例如,返回列表的函数不适合缓存,因为将要缓存的是对列表的引用,而不是列表内容。

阳气不足百病生,身体若出现这些症状,万不可忽视我们身体阳气充足,百病不会来打扰。阳气是中医上的一个名词,它具有温养组织脏器维持生理功能和固卫表等作用。并充盈于周身之气,对于我们的身体健康很重要。在平时的生活中,阳气损耗,如果不夏季容易失眠睡不好?这五道助眠食疗方你一定要试试五道助眠的食疗方送给你,记得点赞收藏三伏天来临,天气逐渐越来越热,不少人的睡眠也开始跟着变差今天给大家推荐五道著名的助眠食疗方一酸枣仁粥食材炒过的酸枣仁30到50克做法取炒过的酸枣阴阳不调,万病之源,给你一个好方,锁住阳气,收敛阴气参考自中国中医药杂志我有一个患者,夏天天气闷热,冷水冲凉后没有及时擦干冷水,第二天就感觉小肚子像揪在一起那样不舒服,小便频数,断断续续的,有尿不尽的感觉,喝热水稍微有点缓解。舌淡红食在古田,那些为你而来的古田美食古田县,隶属福建省宁德市,古田又称玉田。古田历史悠久,这里有福建第一大人工淡水湖翠屏湖。四周群山环抱,层峦叠嶂,四季如春湖面烟波浩淼,空气清新,水质碧澄,素有福建太湖福建千岛湖之美晨读大寺基我看窗外深山密林,云雾笼罩,层峦叠嶂,隐于山中的人,怕是早已与树与花与鸟兽一起成为山的本身。去大寺基,路途遥远,云雾缭绕转了四百六十七个弯,抵达一个地方,百分之九十八点二的当地人都在北京城的森林里穿越一一从回龙观到天通苑早起床,看天气预报,难得多云转阴天。与昨天比,温度低了2度。吃过早餐,一时心血来潮,何不从半塔郊野公园到天通苑来一趟穿越?说走就走,戴上口罩和遮阳帽,手里提溜一瓶水,轻松出门自由行新安惊现大片湖底草原!美到窒息土生土长的新安人看多了青山绿水也想去看看一碧千里的大草原感受风吹草低见牛羊的诗意美景你知道吗?新安竟藏着一片绝美的湖底草原快跟小编一起去打卡!从县城驾车出发不到一个小时就能抵达目的国内首个元宇宙旅游项目爆火,线上导游价格飙升,1小时最低299元疫情给不少行业都带来了沉重打击,文旅产业首当其冲,而随着元宇宙概念的到来,旅游业突然迎来一线生机,那就是用元宇宙的线上旅游来带动行业发展,一方面可以解决旅游舟车劳顿的问题,另一方面脚汗脚臭,多半是脾虚湿气重!中医分享3招,助你健脾排湿除臭随着天气炎热,气温逐渐升高,出门一趟全身上下都被汗液浸透了,大家只想穿得越凉快越好,背心短裤拖鞋全都要换上,但对于一部分人来说,夏天是最令他们苦恼的季节,每次一脱鞋,两脚都散发着一心血管病人应该怎么吃?地中海饮食让你的血管更健康实现心血管健康重在健康的饮食习惯,低盐低糖饮食是大家都知道的。那除此之外,还有哪些主要的地方呢?今天跟大家聊聊被列为非物质文化遗产的饮食习惯地中海饮食。它位列美国最佳饮食排名榜榜首陆博士告诉你,糖尿病人早餐吃什么?这四种能让你轻松稳定血糖糖尿病治疗中饮食干预很重要,不论哪一种类型的糖尿病,都需要均衡营养控制饮食。那么糖尿病人早餐应该吃什么呢?陆博士给大家分享了四种。1碗燕麦粥1个煮鸡蛋1杯无糖酸奶1份绿叶蔬菜1杯牛
2023她力量丨商汤绝影智能汽车事业群商务副总裁杨琳人和人的差别远远大于性别的差别每经记者可杨每经编辑陈俊杰力量曾与传统意义中的柔美相冲撞,但社会意识的进步正消弭刻板印象,当越来越多人谈论起女性主义,期望在对话之中若隐若现或有一天,性别不再是桎梏。这场漫长的沟通长江存储杀红眼了周末看到张大妈(值得买)的一条推送,2T的固态硬盘竟然降到了600元以下。驱动降价的,正是技术实现了突破的长江存储。和手机芯片不同的是,存储芯片对制程要求不高,对工艺要求比较高。而人民币兑美元中间价报6。9525元,下调369个基点金融界3月8日消息今日人民币兑美元中间价6。9525元,较上一交易日(3月7日)的6。9156元下调369个基点。3月8日(周三),美元兑一篮子货币周二创下三个月来的新高,此前美联董事长王明辉辞职执掌云南白药近20年每经记者陈星每经编辑文多3月6日晚,云南白药(SZ000538,股价57。77元,市值1038亿元)公告董事长王明辉辞职。公告称,董事会于近日收到公司董事长王明辉先生送达的辞职报告扭亏!旅游巨头2022年成绩单来了,全年营收200亿!这样看今年旅游市场点蓝字关注,不迷路3月7日,携程发布2022年第四季度及全年未经审计的财务业绩,财报显示携程集团2022年度实现净营业收入为200亿元(单位人民币下同),同比持平,归母净利润14亿80后90后00后成消费中坚中高端消费潜力将加速释放董超餐饮门店客流回升商超商圈活力迸发旅游酒店预订火爆消费市场暖意盎然。政府工作报告提出,要把恢复和扩大消费摆在优先位置。那么,年初的消费回暖是积压消费的释放,还是长期趋势?中国消费壹点日历3。9没有横空出世的幸运,只有不为人知的努力!早安互动编辑王雪飞用镜头记录美好定格精彩瞬间!让你的摄影作品,刻在壹点历的时光机上,陪伴万千读者用户走过一年四季365天!时下,正值阳春三月,正是玉兰花盛开的季节。济南大明湖风景区内的青岛首个国家级旅游休闲街区为什么是这里?青岛新闻网独家记者陈志伟3月1日,文化和旅游部公布了第二批国家级旅游休闲街区名单,金沙滩啤酒城旅游休闲街区与上海市愚园艺术生活街区重庆市贰厂文创街区西安市大唐不夜城步行街等知名街区文化之窗丨诗和远方,就在酒店?这个春天,酒店行业迎来消费旺季。自春节假期至今,许多热门旅游城市的酒店一房难求。同程旅行数据显示,多地酒店的预订量与去年同期相比涨幅超过10倍。暴增的消费需求下,一种新的生活方式日赫莲娜真有眼光!请郭晶晶出山拍广告比王菲惊艳,穿黑衬衫真贵气赫莲娜是公认的贵妇品牌,为了能够贴合品牌的形象定位,邀请的代言人是个性时尚女王王菲,拍摄广告的推广大使都是极具魅力的成熟女性,比如周涛,惠英红以及郭晶晶,真的是非常有眼光。郭晶晶推阿娇的美被低估了!这种侧脸,没有几个明星可以比得过娱乐圈有很多沧海遗珠,阿娇便是其中的典型例子。集颜值与实力于一身,仅仅是充满轮廓线条的侧脸,就没有几个明星是比得过的。美貌曾被低估的她,完全可以称为女娲毕设,让人无可挑剔,网友直言