python缓存_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'

实现

__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

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com

特别注意:本站所有转载文章言论不代表本站观点!

本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值