joblib:加载所有缓存值(或搜索所有值)

Sul*_*yev 1 python caching joblib

使用joblib.Memory我可以缓存某些函数的结果,但我想知道是否有一种有效的方法来找出有缓存值的参数列表。

例如,假设该函数slow_func是针对 的某些值进行计算和缓存的x,我可以找出我缓存了哪些值吗?

from joblib import Memory
mem = Memory(location='cache')

@mem.cache
def slow_func(x):
    return x
Run Code Online (Sandbox Code Playgroud)

use*_*327 5

请谨慎使用以下答案:它使用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)))
Run Code Online (Sandbox Code Playgroud)

StoreBackend封装了所有与缓存存储相关的方法。StoreBackend.load_item加载缓存的结果,并StoreBackend.load_metadata加载所有元数据,包括输入参数。