Asyn c кэширование, которое может удалить указанный ключ c - PullRequest
0 голосов
/ 01 февраля 2020

Итак, у меня есть секция асинхронного c кеширующего кода:

def async_cache(maxsize=128):
    cache = {}

    def decorator(func):
        @wraps(func)
        async def inner(*args, no_cache=False, **kwargs):
            if no_cache:
                return await func(*args, **kwargs)

            key_base = "_".join(str(x) for x in args)
            key_end = "_".join(f"{k}:{v}" for k, v in kwargs.items())
            key = f"{key_base}-{key_end}"

            if key in cache:
                return cache[key]

            res = await func(*args, **kwargs)

            if len(cache) > maxsize:
                del cache[list(cache.keys())[0]]
                cache[key] = res

            return res
        return inner
    return decorator

Как я могу создать функцию cache_info / cache_clear, которая получает хиты и пропускает что-то вроде того, что делает lru_cache? И как бы я мог удалить указанный ключ c (например, я хотел бы иметь возможность сделать что-то вроде этого: `function.cache_clear (* arg)?

Спасибо за помощь!

...