python 自带的 内存缓存

python标准库中的functools模块,提供了functools.lru_cache,基于内存的缓存。

基于内存缓存
lru_cache

from functools import lru_cache

@lru_cache(maxsize=1)
def sum2(a,b):
    print(f"计算{a}+{b} ... ")
    return a+b


print(sum2(2,3))
print(sum2(2,3))

print(sum2(4,7))
print(sum2(4,7))


print(sum2(2,3))
print(sum2(4,7))
maxsize=1,表示可以缓存的元素的个数。
改变maxsize的值为2,再切换为1,运行程序观察输出结果.

sum2.cache_info()    #查看缓存性能
sum2.cache_clear()   #清除缓存


基于磁盘的缓存
joblib

"""
教程 https://joblib.readthedocs.io/en/latest/memory.html
安装 pip install joblib
"""

from joblib import Memory
memory = Memory(location="./cachedir")

@memory.cache
def sum2(a,b):
    print(f"计算{a}+{b} ... ")
    return a+b


print(sum2(2,3))
print(sum2(2,3))

print(sum2(4,7))
print(sum2(4,7))


print(sum2(2,3))
print(sum2(4,7))

两个一起用,内存+硬盘缓存
二级缓存 双重缓存

import time
import random
from functools import lru_cache
from joblib import Memory

memory = Memory(location="cachedir")

@lru_cache(maxsize=5)
@memory.cache
def sum2(arg):
    time.sleep(1)
    list1 = [0,1,2]
    a = random.choice(list1)
    arg = 1/a
    return arg


if __name__ == "__main__":
    while True:
        for i in ["a1","b2","e3",'d4','e5']:
            arg = i
            t0 = time.time()
            try:
                res = sum2(arg)
                print("+++++++++++++++++++++++++++++++++++")
                print(i,res,"sum2 cost",time.time()-t0)
                print("+++++++++++++++++++++++++++++++++++")
            except:
                print("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!")
        input_str = input("继续 or 结束")
        if input_str == 'q':
            break
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值