python实现缓存时间_python中有时间限制的内存缓存

构建具有生存时间的单元素缓存非常简单:_last_result_time = None

_last_result_value = None

def result(val):

global _last_result_time

global _last_result_value

now = datetime.datetime.now()

if not _last_result_time or now - _last_result_time > datetime.timedelta(hours=1):

_last_result_value =

_last_result_time = now

return _last_result_value

如果你想把它概括为一个装饰师,这并不难:

^{pr2}$

如果您希望它处理不同的参数,为每个参数存储生存时间:def cache(ttl=datetime.timedelta(hours=1)):

def wrap(func):

cache = {}

@functools.wraps(func)

def wrapped(*args, **kw):

now = datetime.datetime.now()

# see lru_cache for fancier alternatives

key = tuple(args), frozenset(kw.items())

if key not in cache or now - cache[key][0] > ttl:

value = func(*args, **kw)

cache[key] = (now, value)

return cache[key][1]

return wrapped

return wrap

当然,您可以通过键添加特性来给它一个最大大小,并按存储时间或LRU或其他任何你想要的方式逐出,将缓存统计信息作为修饰函数的属性公开,等等。stdlib中的^{}的实现应该有助于向您展示如何做大多数更棘手的事情(因为它几乎完成了所有这些)。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值