lru_cache - 是否可以只清除缓存中的特定调用?

Dee*_*ace 5 python

我知道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)
Run Code Online (Sandbox Code Playgroud)

随着输出

called with  1
called with  1
Run Code Online (Sandbox Code Playgroud)

use*_*ica 4

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