joblib: загрузите все кэшированные значения (или выполните поиск по всем из них)

#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. Это выглядит великолепно, большое вам спасибо!