Pythonでタイムアウト関数と容量制限を備えた辞書を書く

import time

class CacheDict(dict):
    """ A sized dictionary with a timeout (seconds) """

    def __init__(self, size=100, timeout=None):
        dict.__init__(self)
        self._maxsize = size
        self._stack = []
        self._timeout = timeout

    def __setitem__(self, name, value, timeout=None):
        if len(self._stack) >= self._maxsize:
            self.__delitem__(self._stack[0])
            del self._stack[0]
        if timeout is None:
            timeout = self._timeout
        if timeout is not None:
            timeout = time.time() + timeout
        self._stack.append(name)
        dict.__setitem__(self, name, (value, timeout))

    def get(self, name, default=None):
        try:
            focus = self.__getitem__(name)
            if focus[1] is not None:
                if focus[1] < time.time():
                    self.__delitem__(name)
                    self._stack.remove(name)
                    raise KeyError
            return focus[0]
        except KeyError:
            return default


# sample usage:
d = CacheDict(timeout=60)
for i in range(10000):
    d[i] = 'test'
print(len(d))

 

おすすめ

転載: blog.csdn.net/dragon_T1985/article/details/114643028