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