#python #caching #joblib
Вопрос:
С помощью joblib.Memory
я могу кэшировать результаты какой-либо функции, но мне интересно, есть ли эффективный способ определить список аргументов, для которых есть кэшированное значение.
Например, предположим , что функция slow_func
была вычислена и кэширована для некоторых значений x
, могу ли я узнать, для каких значений у меня есть кэш?
from joblib import Memory
mem = Memory(location='cache')
@mem.cache
def slow_func(x):
return x
Ответ №1:
Пожалуйста, используйте следующий ответ с осторожностью: он использует непубличный API joblib
.
from joblib import Memory
mem = Memory(location='cache')
...
def iterate_cache(mem):
"""Return the list of inputs and outputs from `mem` (joblib.Memory cache)."""
for item in mem.store_backend.get_items():
path_to_item = os.path.split(os.path.relpath(item.path, start=mem.store_backend.location))
result = mem.store_backend.load_item(path_to_item)
input_args = mem.store_backend.get_metadata(path_to_item).get("input_args")
yield input_args, result
print(list(iterate_cache(mem)))
StoreBackend инкапсулирует все методы, связанные с хранением кэша. StoreBackend.load_item
загружает кэшированные результаты и StoreBackend.load_metadata
загружает все метаданные, включая входные аргументы.
Комментарии:
1. Это выглядит великолепно, большое вам спасибо!