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如何利用自带的缓存机制提高效率”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

展开全文
内容来源于互联网和用户投稿,文章中一旦含有米乐app官网登录的联系方式务必识别真假,本站仅做信息展示不承担任何相关责任,如有侵权或涉及法律问题请联系米乐app官网登录删除

最新文章

网站地图