跳转到主要内容

functools.cache()用于方法,正确实现

项目描述

methodic_cache

codecov

functools.cache()用于方法,正确实现。

methodic_cache.cached_method是一个装饰器,根据传递给它的参数缓存方法的返回值。

该库的独特之处在于它不在对象本身上存储任何内容,而是在一个单独的WeakKeyDictionary上存储,其中缓存的生存期与对象的生存期相匹配。

与在需要时在对象本身上存储缓存的这种方法的优点是,由于共享键字典,对象将保持较小的内存占用。有关更多详细信息,请参阅PEP 412The 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 接口的缓存后端(例如 dictlru_cachefunctools.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 (5.7 kB 查看哈希值)

上传时间 源代码

构建分发

methodic_cache-0.3.1-py3-none-any.whl (5.8 kB 查看哈希值)

上传时间 Python 3

由以下机构支持

AWSAWS云计算和安全赞助商DatadogDatadog监控FastlyFastlyCDNGoogleGoogle下载分析MicrosoftMicrosoftPSF赞助商PingdomPingdom监控SentrySentry错误日志StatusPageStatusPage状态页面