Python實現簡單的緩存和緩存decorator
一個簡單的緩存實現,將緩存數據保存在單例的對象中。
使用方法:
# 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'</pre>
實現author = "Andrey Nikishaev" copyright = "Copyright 2010, http://creotiv.in.ua" license = "GPL" version = "0.3" maintainer = "Andrey Nikishaev" email = "creotiv@gmail.com" 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',re.compile(r'\W*')) reg_exp = c.get('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,name,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,name,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 </pre>
本文由用戶 eb5y 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!