• 函数记忆: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     
     
  • 相关阅读:
    JavaScript 知识
    Sleep,Hibernate and Hybrid
    CentOS 7 休眠系统
    centos7如何添加开机启动服务/脚本
    linux下执行.sh文件的方法和语法
    systemctl命令
    linux 更新yum源 改成阿里云源
    Supervisor进程管理&开机自启
    Django中的Request和Response
    ORACLE 触发器
  • 原文地址:https://www.cnblogs.com/mzfly/p/14573746.html
Copyright © 2020-2023  润新知