python - 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
解决方案
这应该被认为是不可能的。对此没有公共 API,根本没有访问缓存的属性,也没有统一的缓存键格式。即使你采取严厉措施(gc
/ctypes
恶作剧)来获取缓存,你也可能会破坏整个 LRU 系统,到处泄漏大量内存,甚至可能出现段错误。实现中的内存管理并不是为了在有人直接弄乱缓存时是安全的。
推荐阅读
- mysql - MySQL:在过程中动态创建游标
- python - 将多个变量传递给 PoolExecutor
- git - Git 状态和本地 repo 文件
- qt - 如何在 Qt 中将 form.ui 插入到 mainwindow.ui 中?
- python - 如何将数据从烧瓶前端发送到 python 后端,最终得到结果?
- css - 更改闪亮的 bsTooltip 框的颜色
- objective-c - 在“for循环”结束时触发事件
- c - 如何在处理c中长度较长的字符串的行中输入2个具有特定大小的字符串?
- typescript - 如何在 TypeScript 的函数声明中指定具有缩小的伞形类型的返回类型?
- django - 在终端中创建超级用户时出错