安装
pip install cacheout
使用
from cacheout import Cache
cache = Cache(maxsize=100, ttl=10)
def test(i):
if cache.get(i) is None:
cache.set(i, i)
print(i, end=" ", flush=True)
return i
else:
return i
装饰器
from functools import _make_key
from cacheout import LRUCache
def lru_cache(maxsize=128, ttl=0, typed=False):
cache = LRUCache(maxsize=maxsize, ttl=ttl)
def decorator(user_function):
def wraper(*args, **kw):
key = _make_key(args, kw, typed)
result = cache.get(key)
if result is None:
result = user_function(*args, **kw)
cache.set(key, result)
return result
return wraper
return decorator
指定时间过期装饰器
import time
from datetime import datetime
from datetime import timedelta
from cacheout import LRUCache
def get_timedelta(etime):
date_split = (time.strftime(f"%Y:%m:%d:")+etime).split(":")
date_split = [int(i) for i in date_split]
edate = datetime(*date_split)
delta = (edate-datetime.now()).seconds
if delta <= 0:
delta = ((edate+timedelta(days=1))-datetime.now()).seconds
def time_cahce(etime="01:00:00"):
cache = {}
def decorator(user_function):
nonlocal cache
def wraper(*args, **kw):
nonlocal cache
result = cache.get(etime)
if result is None:
result = user_function(*args, **kw)
delta = get_timedelta(etime)
cache = LRUCache(maxsize=1, ttl=delta)
cache.set(etime, result)
return result
return wraper
return decorator