Will, скорее всего, правильно, но на всякий случай, если вы захотите попробовать, я думаю, что подкласс TTLCache и перезапись одной функции должны работать:
from cachetools import Cache, TTLCache
cache = TTLItemCache(maxsize=2, ttl=100)
# ttl=100
cache.__setitem__('key1', 'val1')
# ttl=200
cache.__setitem__('key2', 'val2', ttl=200)
class TTLItemCache(TTLCache):
def __setitem__(self, key, value, cache_setitem=Cache.__setitem__, ttl=None):
super(TTLItemCache, self).__setitem__(key, value)
if ttl:
link = self._TTLCache__links.get(key, None)
if link:
link.expire += ttl - self.ttl