python如何利用自带的缓存机制提高效率

2022-03-16 19:31:18 36 0
魁首哥

python如何利用自带的缓存机制提高效率

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

收藏
分享
海报
0 条评论
36
上一篇:python如何在程序退出前执行代码 下一篇:python如何快速计算函数运行时间

本站已关闭游客评论,请登录或者注册后再评论吧~

忘记密码?

图形验证码