Python 缓存机制与 functools.lru_cache

系统 1536 0
原文链接: https://kuanghy.github.io/2016/04/20/python-cache

缓存是一种将定量数据加以保存以备迎合后续请求的处理方式,旨在加快数据的检索速度。

在 Python 的 3.2 版本中,引入了一个非常优雅的缓存机器,即 functool 模块中的 lru_cache 装饰器。

lru_cache 原型如下:

            
              @functools
              
                .
              
              lru_cache
              
                (
              
              maxsize
              
                =
              
              
                None
              
              
                ,
              
               typed
              
                =
              
              
                False
              
              
                )
              
            
          

使用functools模块的lur_cache装饰器,可以缓存最多 maxsize 个此函数的调用结果,从而提高程序执行的效率,特别适合于耗时的函数。参数maxsize为最多缓存的次数,如果为None,则无限制,设置为2n时,性能最佳;如果 typed=True(注意,在 functools32 中没有此参数),则不同参数类型的调用将分别缓存,例如 f(3) 和 f(3.0)。

被 lru_cache 装饰的函数会有 cache_clear 和 cache_info 两个方法,分别用于清除缓存和查看缓存信息。

一个简单的示例演示 lru_cache 效果:

            
              
                from
              
               functools 
              
                import
              
               lru_cache
@lru_cache
              
                (
              
              
                None
              
              
                )
              
              
                def
              
              
                add
              
              
                (
              
              x
              
                ,
              
               y
              
                )
              
              
                :
              
              
                print
              
              
                (
              
              
                "calculating: %s + %s"
              
              
                %
              
              
                (
              
              x
              
                ,
              
               y
              
                )
              
              
                )
              
              
                return
              
               x 
              
                +
              
               y


              
                print
              
              
                (
              
              add
              
                (
              
              
                1
              
              
                ,
              
              
                2
              
              
                )
              
              
                )
              
              
                print
              
              
                (
              
              add
              
                (
              
              
                1
              
              
                ,
              
              
                2
              
              
                )
              
              
                )
              
              
                print
              
              
                (
              
              add
              
                (
              
              
                2
              
              
                ,
              
              
                3
              
              
                )
              
              
                )
              
            
          

输出结果

            
              calculating
              
                :
              
              
                1
              
              
                +
              
              
                2
              
              
                3
              
              
                3
              
              
calculating
              
                :
              
              
                2
              
              
                +
              
              
                3
              
              
                5
              
            
          

从结果可以看出,当第二次调用 add(1, 2) 时,并没有真正执行函数体,而是直接返回缓存的结果。

转载:
Python 缓存机制与 functools.lru_cache


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论