Python自带的AOP Cache
JAVA中可以通过AOP很容易的实现方法的cache, 其实Python比JAVA做的更进一步,直接在核心库中就实现了.
- 示例
from functools import lru_cache
import time
import numpy as np
#maxsiez设置了这个方法的case size只有2个,超过就会删除最近最少使用
@lru_cache(maxsize=2)
def test_lru(seed):
return np.random.randint(9)
- Cache不溢出
for i in range(0, 6):
print(f'2 diff paras, not over maxsize. input:{i%2} output:{test_lru(i%2)}')
##没有超出Cache的size(2),所以反复调用,相同参数返回相同值
2 diff paras, not over maxsize. input:0 output:8
2 diff paras, not over maxsize. input:1 output:3
2 diff paras, not over maxsize. input:0 output:8
2 diff paras, not over maxsize. input:1 output:3
2 diff paras, not over maxsize. input:0 output:8
2 diff paras, not over maxsize. input:1 output:3
- Cache溢出
for i in range(0, 6):
print(f'3 diff paras, over maxsize. input:{i%3}, output:{test_lru(i%3)}')
##超出Cache的size(2),有3个不同的参数,当再次调用相同参数时,得到了不同的结果(也就是再次调用时,不是从Cache中取到的)
3 diff paras, over maxsize. input:0, output:8
3 diff paras, over maxsize. input:1, output:3
3 diff paras, over maxsize. input:2, output:7
3 diff paras, over maxsize. input:0, output:4
3 diff paras, over maxsize. input:1, output:3
3 diff paras, over maxsize. input:2, output:1

本文介绍Python中利用functools.lru_cache装饰器实现的LRU缓存机制。通过示例展示了如何设置缓存大小及缓存溢出的情况。当缓存未满时,相同参数的函数调用会返回相同的输出;而当缓存溢出时,即使参数相同也会因重新计算而得到不同的结果。
697

被折叠的 条评论
为什么被折叠?



