函数记忆:python装饰器实现短时缓存方法执行结果

函数记忆: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/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球