Запоминание: установка размера используемого кэша

#python #caching #memoization

#python #кэширование #запоминание

Вопрос:

Я использую запоминание, чтобы ускорить использование сложной функции complexfunct() . Эта функция принимает в качестве входных numpy.array данных переменную размерность (она может хранить от 5 до 15 значений). Каждое значение numpy.array принадлежит набору из 5 значений. Таким образом, количество разрешенных входных данных для my complexfunct() довольно велико, запомнить их все невозможно. Вот почему, когда я запускаю свой jupyter notebook, он выходит из строя.

Функция запоминания, которую я использую, — это:

 def memoize(func):
    """Store the results of the decorated function for fast lookup
    """
    # Store results in a dict that maps arguments to results
    cache = {}
    def wrapper(*args, **kwargs):
        key = str(args)   str(kwargs)
        if key not in cache:
            cache[key] = func(*args, **kwargs)
        return cache[key]
    return wrapper
 

Мой вопрос: могу ли я установить размер используемого кэша, чтобы, если он будет насыщен и новый ввод должен быть сохранен в кэше, он заменит первую запись — или, что лучше, наименее недавно использованную.

Спасибо всем в advanced.

Ответ №1:

если он переполнен и новый ввод должен быть сохранен в кэше, тогда он заменит первую запись — или, что лучше, наименее недавно использованную.

Учитывая, что вы заботитесь о порядке вставки, при принятии решения о том, что удалять, я предлагаю использовать коллекции.OrderedDict вместо dict , т.е. добавить import collections и заменить

 cache = {}
 

используя

 cache = collections.OrderedDict()
 

затем добавьте проверку после вставки, и если размер превышает лимит, просто сделайте:

 cache.popitem(last=False)
 

чтобы удалить самую старую запись.

Комментарии:

1. Это может сделать работу за меня .. большое вам спасибо!