joblib:加载所有缓存值(或搜索所有缓存值)
joblib: load all cached values (or search through all of them)
使用 joblib.Memory
我可以缓存某些函数的结果,但我想知道是否有一种有效的方法来找出具有缓存值的参数列表。
例如,假设函数 slow_func
是为 x
的一些值计算和缓存的,我可以找出我有缓存的值吗?
from joblib import Memory
mem = Memory(location='cache')
@mem.cache
def slow_func(x):
return x
请谨慎使用以下答案:它使用 joblib
的非 public API。
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
加载所有元数据,包括输入参数。
使用 joblib.Memory
我可以缓存某些函数的结果,但我想知道是否有一种有效的方法来找出具有缓存值的参数列表。
例如,假设函数 slow_func
是为 x
的一些值计算和缓存的,我可以找出我有缓存的值吗?
from joblib import Memory
mem = Memory(location='cache')
@mem.cache
def slow_func(x):
return x
请谨慎使用以下答案:它使用 joblib
的非 public API。
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
加载所有元数据,包括输入参数。