使用此处找到的 LRU 缓存装饰器:http: //code.activestate.com/recipes/578078-py26-and-py30-backport-of-python-33s-lru-cache/
from lru_cache import lru_cache
class Test:
@lru_cache(maxsize=16)
def cached_method(self, x):
return x + 5
我可以用它创建一个装饰类方法,但它最终会创建一个全局缓存,适用于类 Test 的所有实例。但是,我的意图是为每个实例创建一个缓存。因此,如果我要实例化 3 个测试,我将拥有 3 个 LRU 缓存,而不是所有 3 个实例的 1 个 LRU 缓存。
我知道这种情况发生的唯一迹象是,当在不同的类实例修饰方法上调用 cache_info() 时,它们都返回相同的缓存统计信息(鉴于它们正在与非常不同的参数进行交互,这种情况极不可能发生):
CacheInfo(hits=8379, misses=759, maxsize=128, currsize=128)
CacheInfo(hits=8379, misses=759, maxsize=128, currsize=128)
CacheInfo(hits=8379, misses=759, maxsize=128, currsize=128)
是否有一个装饰器或技巧可以让我轻松地让这个装饰器为每个类实例创建一个缓存?