Время истечения словаря в памяти в Python - PullRequest
0 голосов
/ 11 ноября 2018

Мне было просто интересно, как можно эффективно реализовать словарь с истечением времени в памяти в Python таким образом, чтобы пары ключ-значение истекали через заданный интервал времени.

1 Ответ

0 голосов
/ 25 января 2019

Шаблон проектирования, обычно используемый для этого, не через словарь, а через декоратор функции или метода. Управление кэш-памятью осуществляется за кулисами.

В этом ответе используется декоратор ttl_cache в cachetools==3.1.0 с Python 3.7. Это работает так же, как functools.lru_cache, но со временем жизни . Что касается логики реализации, рассмотрим исходный код .

import cachetools.func

@cachetools.func.ttl_cache(maxsize=128, ttl=10 * 60)
def example_function(key):
    return get_expensively_computed_value(key)


class ExampleClass:
    EXP = 2

    @classmethod
    @cachetools.func.ttl_cache()
    def example_classmethod(cls, i):
        return i**cls.EXP

    @staticmethod
    @cachetools.func.ttl_cache()
    def example_staticmethod(i):
        return i**3

Если, однако, вы настаиваете на использовании словаря, cachetools также имеет TTLCache.

import cachetools

ttl_cache = cachetools.TTLCache(maxsize=128, ttl=10 * 60)
...