首页 > 解决方案 > lru_cache - 是否可以只清除缓存中的特定调用?

问题描述

我知道cache_clear。但是我想知道如何清除单个调用的缓存。看见那个cache_clear不接受论点,我认为唯一的方法是直接弄乱底层字典。会有什么副作用(如果有的话)?

目标是实现以下目标

from functools import lru_cache

@lru_cache()
def f(x):
    print('called with ', x)


f(1)
f.cache_clear(1)  # obviously does not work
f(1)

随着输出

called with  1
called with  1

标签: python

解决方案


这应该被认为是不可能的。对此没有公共 API,根本没有访问缓存的属性,也没有统一的缓存键格式。即使你采取严厉措施(gc/ctypes恶作剧)来获取缓存,你也可能会破坏整个 LRU 系统,到处泄漏大量内存,甚至可能出现段错误。实现中的内存管理并不是为了在有人直接弄乱缓存时是安全的。


推荐阅读