Сохранить кеш в файл functools.lru_cache в Python>=3.2




python-3.x memoization (3)

Я использую @functools.lru_cache в Python 3.3. Я хотел бы сохранить кеш в файл, чтобы восстановить его при перезапуске программы. Как я мог сделать?

Редактировать 1 Возможное решение: нам нужно засолить любой вызываемый

Проблема травления __closure__ :

_pickle.PicklingError: Can't pickle <class 'cell'>: attribute lookup builtins.cell failed

Если я пытаюсь восстановить функцию без нее, я получаю:

TypeError: arg 5 (closure) must be tuple

Вы можете использовать мою библиотеку, mezmorize

import random
from mezmorize import Cache

cache = Cache(CACHE_TYPE='filesystem', CACHE_DIR='cache')


@cache.memoize()
def add(a, b):
    return a + b + random.randrange(0, 1000)

>>> add(2, 5)
727
>>> add(2, 5)
727

Вы не должны касаться ничего внутри реализации декоратора, кроме общедоступного API, поэтому, если вы хотите изменить его поведение, вам, вероятно, нужно скопировать его реализацию и добавить необходимые функции самостоятельно. Обратите внимание, что кэш в настоящее время хранится в виде круглого двусвязного списка, поэтому вам нужно быть осторожным при его сохранении и загрузке.


Подумайте об использовании joblib.Memory для постоянного кэширования на диск.

Поскольку диск огромен, нет необходимости в схеме кэширования LRU.





memoization