Python实现简单的缓存和缓存decorator
发布时间:2020-05-24 23:32:21 所属栏目:Python 来源:互联网
导读:Python实现简单的缓存和缓存decorator
|
下面是脚本之家 jb51.cc 通过网络收集整理的代码片段。 脚本之家小编现在分享给大家,也给大家做个参考。 # Initialize
SimpleCache({'data':{'example':'example data'}})
# Getting instance
c = SimpleCache.getInstance()
c.set('re.reg_exp_compiled',re.compile(r'W*'))
reg_exp = c.get('re.reg_exp_compiled',default=re.compile(r'W*'))
# --------------------------------------------------------------
c = SimpleCache.getInstance()
reg_exp = c.getset('re.reg_exp_compiled',re.compile(r'W*'))
# --------------------------------------------------------------
@scache
def func1():
return 'OK'
实现 __author__ = "Andrey Nikishaev"
__copyright__ = "Copyright 2010,http://creotiv.in.ua"
__license__ = "GPL"
__version__ = "0.3"
__maintainer__ = "Andrey Nikishaev"
__email__ = "[emailprotected]"
__status__ = "Production"
"""
Simple local cache.
It saves local data in singleton dictionary with convenient interface
Examples of use:
# Initialize
SimpleCache({'data':{'example':'example data'}})
# Getting instance
c = SimpleCache.getInstance()
c.set('re.reg_exp_compiled',default=re.compile(r'W*'))
or
c = SimpleCache.getInstance()
reg_exp = c.getset('re.reg_exp_compiled',re.compile(r'W*'))
or
@scache
def func1():
return 'OK'
"""
class SimpleCache(dict):
def __new__(cls,*args):
if not hasattr(cls,'_instance'):
cls._instance = dict.__new__(cls)
else:
raise Exception('SimpleCache already initialized')
return cls._instance
@classmethod
def getInstance(cls):
if not hasattr(cls,'_instance'):
cls._instance = dict.__new__(cls)
return cls._instance
def get(self,name,default=None):
"""Multilevel get function.
Code:
Config().get('opt.opt_level2.key','default_value')
"""
if not name:
return default
levels = name.split('.')
data = self
for level in levels:
try:
data = data[level]
except:
return default
return data
def set(self,value):
"""Multilevel set function
Code:
Config().set('opt.opt_level2.key','default_value')
"""
levels = name.split('.')
arr = self
for name in levels[:-1]:
if not arr.has_key(name):
arr[name] = {}
arr = arr[name]
arr[levels[-1]] = value
def getset(self,value):
"""Get cache,if not exists set it and return set value
Code:
Config().getset('opt.opt_level2.key','default_value')
"""
g = self.get(name)
if not g:
g = value
self.set(name,g)
return g
def scache(func):
def wrapper(*args,**kwargs):
cache = SimpleCache.getInstance()
fn = "scache." + func.__module__ + func.__class__.__name__ +
func.__name__ + str(args) + str(kwargs)
val = cache.get(fn)
if not val:
res = func(*args,**kwargs)
cache.set(fn,res)
return res
return val
return wrapper
以上是脚本之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。 如果觉得脚本之家网站内容还不错,欢迎将脚本之家网站推荐给程序员好友。 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
