--- a +++ b/util/cache.py @@ -0,0 +1,21 @@ +# Copied from python 3 documentation +# https://docs.python.org/3/library/collections.html#ordereddict-examples-and-recipes +from collections import OrderedDict + + +class LRU(OrderedDict): + """Limit size, evicting the least recently looked-up key when full""" + def __init__(self, maxsize=128, *args, **kwargs): + self.maxsize = maxsize + super().__init__(*args, **kwargs) + + def __getitem__(self, key): + value = super().__getitem__(key) + self.move_to_end(key) + return value + + def __setitem__(self, key, value): + super().__setitem__(key, value) + if len(self) > self.maxsize: + oldest = next(iter(self)) + del self[oldest]