functools.cache()用于方法,正确实现
项目描述
methodic_cache
functools.cache()
用于方法,正确实现。
methodic_cache.cached_method
是一个装饰器,根据传递给它的参数缓存方法的返回值。
该库的独特之处在于它不在对象本身上存储任何内容,而是在一个单独的WeakKeyDictionary上存储,其中缓存的生存期与对象的生存期相匹配。
与在需要时在对象本身上存储缓存的这种方法的优点是,由于共享键字典,对象将保持较小的内存占用。有关更多详细信息,请参阅PEP 412和The Dictionary Even Mightier - Brandon Rhodes at PyCon 2017, 00:21:02。
特性
- 易于使用
- 可扩展,支持自定义缓存后端(例如LRUCache、LFUCache等)
- 支持不可哈希对象
- 支持冻结/槽类
- 测试内存泄漏
安装
pip install methodic_cache
使用
from methodic_cache import cached_method
class MyClass:
@cached_method
def my_method(self, arg1, arg2):
return arg1 + arg2
my_obj = MyClass()
my_obj.my_method(1, 2) # returns 3
my_obj.my_method(1, 2) # returns 3 from the cache
使用带有 __slots__
的类
定义 __slots__
的类需要有一个 __weakref__
插槽才能实现弱引用
from methodic_cache import cached_method
class MyClass:
__slots__ = ("my_attr", "__weakref__") # <-- __weakref__ is required
def __init__(self, my_attr):
self.my_attr = my_attr
@cached_method
def my_method(self, arg1, arg2):
print(f"Computing {self.my_attr} + {arg1} + {arg2}...")
return self.my_attr + arg1 + arg2
my_obj = MyClass(1)
my_obj.my_method(2, 3)
# prints "Computing 1 + 2 + 3..."
# returns 6
my_obj.my_method(2, 3)
# returns 6
自定义缓存后端
您可以使用任何实现了 MutableMapping
接口的缓存后端(例如 dict
、lru_cache
、functools.lru_cache
等)。默认缓存后端是 cachetools.Cache(maxsize=math.inf)
,它将缓存限制在 self
对象的生命周期内。
您可以通过将不同的缓存后端作为 cache_factory
参数传递给 cached_method
来使用不同的缓存后端
from methodic_cache import cached_method
from cachetools import LRUCache
class MyClass:
@cached_method(cache_factory=lambda: LRUCache(maxsize=1))
def my_method(self, arg1, arg2):
print(f"Computing {arg1} + {arg2}...")
return arg1 + arg2
my_obj = MyClass()
my_obj.my_method(1, 1)
# prints Computing 1 + 1...
# returns 2
my_obj.my_method(1, 1)
# returns 2
my_obj.my_method(2, 2)
# prints Computing 2 + 2...
# returns 4
my_obj.my_method(1, 1) # <-- this will be recomputed because the cache is full
# prints Computing 1 + 1...
# returns 2
项目详情
关闭
methodic_cache-0.3.1.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 54b2355f49260673e73309634cb06d86e5b9c15bd7639967608a3e0424ba198a |
|
MD5 | f829b79187c9a051b0f7a34894f28064 |
|
BLAKE2b-256 | a52e7d191abcb41b0942e64096371b6fe4c942f6cfbac8b8a63a7cf32ebac293 |
关闭
methodic_cache-0.3.1-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 81eae57ee826b735bdb5464efccdd4e6e09050e4e54e2d87bddf2ce705389fa2 |
|
MD5 | 6d7f11b2e664c9f92a449ecefebd7fcb |
|
BLAKE2b-256 | 256afbab1056959c57a0c7eb8482a8fc890aabaae7b9e82b28c1c1a889b04867 |