You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何重命名Diskcache记忆化缓存并保留原有计算数据?

重命名diskcache中memoize的现有缓存键

diskcache的Cache.memoize装饰器若省略name参数,会基于函数全名生成缓存键,但函数全名受导入方式影响,导致不同脚本无法共享缓存。如果已基于自动推断的名称生成大量缓存,不想重新计算,可按以下步骤将现有缓存键迁移到新的显式name对应的键:

1. 确认新旧缓存键前缀

memoize的缓存键格式为memoize:{name}:{args_hash},其中name是自动推断的函数全名或显式指定的名称。先确定旧的推断名称(例如函数在mymodule.utils中,推断名称可能是mymodule.utils.long_computation),以及新的显式名称(比如my_long_computation)。

2. 遍历迁移缓存键

通过Cache的迭代器遍历所有键,筛选出旧前缀的键,将对应值复制到新前缀的键,可选删除旧键以节省空间:

from diskcache import Cache

# 初始化缓存实例
cache = Cache("path/to/your/cache/directory")

# 替换为实际的旧推断名称和新显式名称
old_memoize_name = "mymodule.utils.long_computation"
new_memoize_name = "my_long_computation"

# 遍历所有缓存键
for key in cache.iterkeys():
    if isinstance(key, str) and key.startswith(f"memoize:{old_memoize_name}:"):
        # 生成新键
        new_key = key.replace(f"memoize:{old_memoize_name}:", f"memoize:{new_memoize_name}:")
        # 复制缓存值到新键
        cache.set(new_key, cache.get(key))
        # 可选:删除旧键
        # cache.delete(key)

print("缓存键迁移完成")

3. 更新函数的装饰器

修改目标函数的memoize装饰器,指定显式name参数,确保后续调用使用新的缓存键:

@cache.memoize(name="my_long_computation")
def long_computation(*args):
    # 原函数逻辑
    ...

注意事项

  • 迁移前建议备份缓存目录,避免数据丢失。
  • 若缓存条目数量庞大,遍历迁移可能耗时,建议在低负载时段执行。

内容的提问来源于stack exchange,提问作者J E K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 23:26:05