python如何利用自带的缓存机制提高效率-mile米乐体育
python如何利用自带的缓存机制提高效率
这篇文章将为大家详细讲解有关python如何利用自带的缓存机制提高效率,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
利用自带的缓存机制提高效率
缓存是一种将定量数据加以保存,以备迎合后续获取需求的处理方式,旨在加快数据获取的速度。
数据的生成过程可能需要经过计算,规整,远程获取等操作,如果是同一份数据需要多次使用,每次都重新生成会大大浪费时间。所以,如果将计算或者远程请求等操作获得的数据缓存下来,会加快后续的数据获取需求。
为了实现这个需求,python 3.2 中给我们提供了一个机制,可以很方便的实现,而不需要你去写这样的逻辑代码。
这个机制实现于 functool 模块中的 lru_cache 装饰器。
@functools.lru_cache(maxsize=none,typed=false)
参数解读:
maxsize:最多可以缓存多少个此函数的调用结果,如果为none,则无限制,设置为 2 的幂时,性能最佳
typed:若为 true,则不同参数类型的调用将分别缓存。
举个例子
fromfunctoolsimportlru_cache@lru_cache(none)defadd(x,y):print("calculating:%s %s"%(x,y))returnx yprint(add(1,2))print(add(1,2))print(add(2,3))
输出如下,可以看到第二次调用并没有真正的执行函数体,而是直接返回缓存里的结果
calculating:1 233calculating:2 35
下面这个是经典的斐波那契数列,当你指定的 n 较大时,会存在大量的重复计算
deffib(n):ifn<2:returnnreturnfib(n-2) fib(n-1)
第六点介绍的 timeit,现在可以用它来测试一下到底可以提高多少的效率。
不使用 lru_cache 的情况下,运行时间 31 秒
importtimeitdeffib(n):ifn<2:returnnreturnfib(n-2) fib(n-1)print(timeit.timeit(lambda:fib(40),number=1))#output:31.2725698948
由于使用了 lru_cache 后,运行速度实在太快了,所以我将 n 值由 30 调到 500,可即使是这样,运行时间也才 0.0004 秒。提高速度非常显著。
importtimeitfromfunctoolsimportlru_cache@lru_cache(none)deffib(n):ifn<2:returnnreturnfib(n-2) fib(n-1)print(timeit.timeit(lambda:fib(500),number=1))#output:0.0004921059880871326
关于“python如何利用自带的缓存机制提高效率”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。