简单对象/方法结果缓存具有可选的持久缓存。支持内存文件或redis作为存储

object_cacher的Python项目详细描述


对象的简单缓存。将对象的副本存储在内存中(或pickle存储在文件中),并返回该对象的副本。函数参数这是一个缓存键。

>>> from object_cacher import ObjectCacher
>>> @ObjectCacher(timeout=5)
... def test(*args):
...     print ('Real call')
...     return args
...
>>> test(1,2,3)
Real call
(1, 2, 3)
>>> test(1,2,3)
(1, 2, 3)
>>> test(1,2,3,4)
Real call
(1, 2, 3, 4)
>>> test(1,2,3,4)
... (1, 2, 3, 4)

对硬函数或方法的结果进行缓存。 例如,您有一个远程restful api,其中包含许多字典。您可以缓存它:

>>> from urllib import urlopen
>>> from object_cacher import ObjectCacher
>>> @ObjectCacher(timeout=60)
... def get_api():
...     print "This real call"
...     return urlopen('https://api.github.com/').read()
...
>>> get_api()
This real call
'{"current_user_url":"https://api.github.com/user", ...'
>>> get_api()
'{"current_user_url":"https://api.github.com/user", ...'

因此,您只发出了一次http请求。

对于方法,您可以这样使用:

>>> from urllib import urlopen
>>> from object_cacher import ObjectCacher
>>> class API(object):
...     @ObjectCacher(timeout=60, ignore_self=True)
...     def get_methods(self):
...         print "Real call"
...         return urlopen('https://api.github.com/').read()
...
>>> a = API()
>>> a.get_methods()
Real call
'{"current_user_url":"https://api.github.com/user", ...'
>>> b = API()
>>> b.get_methods()
'{"current_user_url":"https://api.github.com/user", ...'

如果设置了ignore_self参数,缓存将由所有实例共享。否则将拆分实例的缓存。

也可以使用持久缓存。 “objectPersistentCacher”类装饰器生成基于文件的pickle序列化缓存存储。 如果要在重新运行后保留缓存,则必须确定缓存ID:

>>> from urllib import urlopen
>>> from object_cacher import ObjectCacher
>>> class API(object):
...     @ObjectPersistentCacher(timeout=60, ignore_self=True, oid='com.github.api.listofmethods')
...     def get_methods(self):
...         print "Real call"
...         return urlopen('https://api.github.com/').read()
...
>>> a = API()
>>> a.get_methods()
Real call
'{"current_user_url":"https://api.github.com/user", ...'
>>> b = API()
>>> b.get_methods()
'{"current_user_url":"https://api.github.com/user", ...'

这就是重新运行后保留缓存。

您可以通过更改“cache-dir”类属性来更改objectpersistentcacher的缓存目录。

>>> ObjectPersistentCacher.CACHE_DIR = '/var/tmp/my_cache'

安装

您可以从pypi安装

pip install object_cacher

或手动操作

python setup.py install

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java无法打印/获取2D数组的特定行   java替换JSP web应用程序中的默认resourceBundle和resourceControl实现   java将地图坐标转换为屏幕坐标   Guava地图中的java惰性驱逐   反射Java getDeclaredConstructor失败,来自JUnit的NoSuchMethodException   java有一个基于正则表达式的web servlet过滤器。xml?   java如何在Android中隐藏/显示表单?   java 7的简单代码度量独立maven插件   sockets java中哪种技术可用于在两个不同系统之间传输大量同步数据?   java无法处理我的导航菜单项的单击事件   java阵列输出必须是一年中的几个月   java Elasticsearch错误:MapperParsingException:无法分析   java 安卓复制文件显示错误   JSF2.2JavaJSF网站使用BootsFaces页面直接构建   Java中while循环的BigO   java如何使用AspectJ在AOP中创建每个类、每个对象和每个方法/源位置部分的方面   从地图查看java文本   java如何从线程触发PropertyChange事件?   java Spring引导在运行时添加和删除单例