全局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
```
================
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
```
项目详情
关闭
global_lru_cache-1.0.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 45db856ec325dd52c942c6800b0209bbf53e62df6ea1a6fa052767027c7d4d98 |
|
MD5 | fb425ddcbbc03b10fda57f3dd922303e |
|
BLAKE2b-256 | 7d370a30df4fb7fca38fe94994a56dc48872a697e85155751b80c1d724aa7d55 |