Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Python functools.lru_cache with timeout and passing lru_cache kwargs
import functools
import datetime
def timed_cache(maxsize=128, typed=False, **timedelta_kwargs):
def _wrapper(f):
update_delta = datetime.timedelta(**timedelta_kwargs)
next_update = datetime.datetime.utcnow() - update_delta
# Apply @lru_cache to f with no cache size limit
f = functools.lru_cache(maxsize=maxsize, typed=typed)(f)
@functools.wraps(f)
def _wrapped(*args, **kwargs):
nonlocal next_update
now = datetime.datetime.utcnow()
if now >= next_update:
f.cache_clear()
next_update = now + update_delta
return f(*args, **kwargs)
return _wrapped
return _wrapper
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment