Итак, у меня есть секция асинхронного 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)?
Спасибо за помощь!