Red*_*war 5 python caching lru python-3.x
我正在研究Python 的 LRU 缓存装饰器的实现细节。为了正确理解装饰器在不同场景中的行为lru_cache
,我还浏览了以下答案:
到目前为止,我可以看出这三种情况下的缓存行为是不同的:
\nstaticmethod
orclassmethod
装饰器装饰。第一种情况是快乐路径,其中用lru_cache
装饰器装饰的每个函数都有自己的缓存。这已经有据可查。在第二种情况下,缓存在类的多个实例之间共享,其中每个实例对于实例方法的相同参数将具有不同的键。这在我列出的最后一个问题中得到了很好的解释。在第三种情况下,缓存也在封装类的多个实例之间共享。但是,由于静态方法或类方法不将self
其作为第一个参数,因此类的实例不会为相同的参数创建单独的缓存条目。
我的问题是\xe2\x80\x94什么实现细节定义了这种行为?在函数的实现中lru_cache
,我只能看到函数内部的本地缓存字典_lru_cache_wrapper
正在保存缓存条目。这是片段:
def _lru_cache_wrapper(user_function, maxsize, typed, _CacheInfo):\n \n sentinel = object() \n make_key = _make_key \n PREV, NEXT, KEY, RESULT = 0, 1, 2, 3 \n\n cache = {} # This is a local dict, \n # then how come the instance cache entries are shared?\n
Run Code Online (Sandbox Code Playgroud)\n我不明白的是,当装饰lru_cache
器应用于类中的方法时,如何在类的实例之间共享本地缓存字典?我期望它的行为与第一种情况相同,其中每个实体都有自己的缓存并且没有任何内容是共享的。
归档时间: |
|
查看次数: |
1042 次 |
最近记录: |