找回密码
 会员注册
查看: 28|回复: 0

如何使用Python内置缓存装饰器@lru_cache,@cache与@cached_property

[复制链接]

2万

主题

0

回帖

6万

积分

超级版主

积分
65016
发表于 2024-9-11 15:39:55 | 显示全部楼层 |阅读模式
1.为什么需要缓存技术?使用缓存是优化Python程序速度的重要方法之一。如果使用得当,可以大幅减少计算资源的负载,有效加快代码运行速度Python的内置库functools模块附带了@lru_cache,@cache,@cached_property装饰器,使用非常简便,不需要安装第3方库,不需要redis等数据库保存对象等,通常只需要1行代码,就可以对函数运算结果、类成员方法运算结果进行缓存。本文将介绍这3种缓存工具的使用步骤及实例。2.@lru_cache缓存装饰器的使用@lru_cache是最常见的缓存装饰器。lru_cache是:Lastrecentlyusedcache的简写,可以将该函数最近调用的输入参数以及结果进行缓存。如果有新的调用,先检查缓存是否有相同的输入参数,如果存在,则直接返回对应结果。如果是无参函数,第1次调用后,以后每次调用,直接返回缓存结果。先看1个例子fromfunctoolsimportlru_cachefrommathimportsin@lru_cachedefsin_half(x):returnsin(x)/2print('firstcallresult:',sin_half(60))print('secondcallresult:',sin_half(60))12345678910上例中,第1次运行函数后,lru_cache会缓存调用参数及返回结果。第2次运行时,lru_cache都会检查输入,发现缓存中存在相同输入参数60,则从缓存中返回结果。如果函数执行的是计算量很重的任务,对于相同输入,可以明显地节省系统资源。装饰器参数lru_cache默认不清除缓存内容,因此缓存会无限增长,如果程序是长期运行的服务,可能存在耗尽内存的风险。因此,必须添加1个maxsize参数:@lru_cache(maxsize)的参数maxsize表示要缓存的最近调用次数.如@lru_cache(360)表示,只缓存最近360次的函数调用结果。@lru_cache(360)defsin_half(x):returnsin(x)/2123缓存操作查看缓存报告:sin_half.cache_info()强制清除缓存内容:sin_half.cache_clear()当然也可以使用python的garbagecollection清除缓存。下面使用1个示例来演示上述内容:importfunctoolsimportgc#主要功能:#验证@lru_cache装饰器,.chche_info()和.cache_clear()方法的使用#garbagecollection的使用@functools.lru_cache(maxsize=300)#MaxnumberofLastrecentlyusedcachedeffib(n): ifn
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2024-12-29 12:50 , Processed in 0.499460 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表