Я делаю много избыточных вызовов api, поэтому решил использовать lru_cache. Однако я также хотел время от времени очищать кеш на случай, если значение ответа изменится для данного ввода. Поэтому в качестве решения я создал свой собственный декоратор, чтобы очищать кеш каждый заданный промежуток времени, но теперь моя функция api_call (), кажется, всегда возвращает None, несмотря ни на что. Вот мой код:
def cache_maintainer(clear_time: int):
"""
A function decorator that clears lru_cache clear_time seconds
:param clear_time: In seconds, how often to clear cache (only checks when called)
"""
def inner(func):
def wrapper(*args, **kwargs):
if hasattr(func, 'next_clear'):
if time.time() > func.next_clear:
func.cache_clear()
func.next_clear = time.time() + clear_time
else:
func.next_clear = time.time() + clear_time
func(*args, **kwargs)
return wrapper
return inner
@cache_maintainer(86400) # clear cache every 1 day
@lru_cache(maxsize=1000)
def api_call(param):
return param
print(api_call("test"))
Я всю жизнь не могу понять, что я сделал не так