cacheout带时间缓存

cooolr 于 2021-07-14 发布

安装

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