跳转到主要内容

全局LRU缓存装饰器

项目描述

global_lru_cache
================

Python全局LRU缓存记忆化装饰器。


什么是全局LRU缓存?
================
Python有很多优秀的LRU缓存。Python 3自带[functools.lru_cache](https://docs.pythonlang.cn/3/library/functools.html#functools.lru_cache),并且也已经[回退到Python 2](http://code.activestate.com/recipes/578078-py26-and-py30-backport-of-python-33s-lru-cache/)。还有[pylru](https://github.com/jlhutch/pylru),[cachetools](https://github.com/tkem/cachetools),[lru-dict](https://github.com/amitdev/lru-dict),[repoze.lru](https://github.com/repoze/repoze.lru),等等。

所有这些缓存共同的特点是,当用作函数装饰器时,它们为每个装饰的函数维护一个单独的缓存,并且您通常只能指定缓存条目的最大数量,而不考虑实际占用的内存大小。这可能对于大多数用例已经足够了,但在某些情况下,拥有一个全局共享的缓存,它可以自动根据可用系统内存管理其大小,可能更方便。例如,当从非常慢的数据库中缓存非常大的查询时,这可能很有用。如果您的缓存最终使用了系统内存的很大一部分,您需要确保不要使用过多的内存,尤其是在与其他进程共享系统的情况下。

我无法找到现有的此类缓存实现,所以我使用了一些在线找到的基本开源代码,并对其进行修改以满足我的需求。结果是有一个简单的装饰器库,它不接受任何参数,并将所有缓存数据作为单个缓存来管理。我称之为LRU缓存,但在无效化缓存条目时,它实际上使用一个评分函数,该函数考虑了最后访问时间、缓存条目在内存中的大小以及缓存函数调用的持续时间。


用法
================
```python
from memoize import memoized

@memoized
def slow_function(arg1, arg2)
time.sleep(30)
返回 arg1 * arg2
```

项目详情


发布历史 发布通知 | RSS 源

下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源代码分发

global_lru_cache-1.0.tar.gz (6.2 kB 查看哈希值)

上传时间 源代码

由以下支持