【发布时间】:2021-10-27 06:52:17
【问题描述】:
我有一个带有 lru_cache annotation 注释的方法的类:
CACHE_SIZE=16384
class MyClass:
[...]
@lru_cache(maxsize=CACHE_SIZE)
def _my_method(self, texts: Tuple[str]):
<some heavy text processing>
def cache_info(self):
return self._my_method.cache_info()
运行一段时间后,通过cache_info()方法查看缓存统计:
c = MyClass()
[...]
c.cache_info()
{
"hits":9348,
"misses":4312,
"maxsize":16384,
"currsize":2588
}
我的问题是:currsize 怎么可能小于 misses 并且小于 maxsize?
我的理解是:对于每次未命中,结果都会添加到缓存中,从而增加当前大小。只有当当前大小达到最大大小时,才会删除缓存的结果。由于此处尚未达到最大大小,因此应缓存每个未命中,因此此时currsize 应等于misses。
但是,这似乎不是这种方式。
【问题讨论】: