函数记忆:python装饰器实现短时缓存方法执行结果
【函数记忆】方法结果缓存装饰器
cache = {}
def is_obsolete(entry, duration):
d = time.time() - entry['time']
return d > duration
def compute_key(function, args, kwargs):
key = pickle.dumps((function.__name__, args, kwargs))
return hashlib.sha1(key).hexdigest()
def memoize(duration=10):
def _memorize(function):
@wraps(function) # update_wrapper维持被修饰函数属性不变
def __memorize(*args, **kwargs):
key = compute_key(function, args, kwargs) # 方法名和传入的参数不同key会不同
if key in cache:
if not is_obsolete(cache[key], duration):
print('%s 使用缓存' % function.__name__)
return cache[key]['value']
else:
print('%s 删除缓存' % function.__name__)
del cache[key] # 删除过时缓存
result = function(*args, **kwargs)
cache[key] = {'value': result, 'time': time.time()}
return result
return __memorize
return _memorize
使用方法:
@memoize(10)
def get_data_list(num, limit, skip):
# data将会被缓存10秒,十秒内调用get_data_list方法将会使用缓存,10秒后将重新执行方法并再缓存10秒,以此类推...
data = num + limit + skip
return data
undefined
Original: https://www.cnblogs.com/mzfly/p/14573746.html
Author: 橘个栗子
Title: 函数记忆:python装饰器实现短时缓存方法执行结果
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/564234/
转载文章受原作者版权保护。转载请注明原作者出处!