[Python]Decorator 를 사용 하여 Cache 를 디자인 합 니 다.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Created on 4/20/16
@author: [email protected]
My Blog: jiezhi.github.io
Reference: Chapter 2--Decorators_Proxy Page.53
"""
import time
import hashlib
import pickle
cache = {}
def is_obsolete(entry, duration):
return time.time() - entry['time'] > duration
def compute_key(function, args, kw):
key = pickle.dumps((function.func_name, args, kw))
return hashlib.sha1(key).hexdigest()
def memoize(duration=10):
def _memoize(function):
def __memoize(*args, **kw):
key = compute_key(function, args, kw)
# do we have it already?
if key in cache and not is_obsolete(cache[key], duration):
print 'we got a winner'
return cache[key]['value']
# computing
result = function(*args, **kw)
# storing the result
cache[key] = {'value': result, 'time': time.time()}
return result
return __memoize
return _memoize
@memoize()
def very_very_very_complex_stuff(a, b):
return a + b
if __name__ == '__main__':
print very_very_very_complex_stuff(2, 2)
print cache
print very_very_very_complex_stuff(2, 2)
실행 후 결 과 를 볼 수 있 습 니 다:
4
{'dedfca39c250ca2047c5d66a13c5df2e9ac90181': {'value': 4, 'time': 1461155366.249486}}
we got a winner
4
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
상자 뜯 기와 포장개념: 포장: 기본 데이터 형식 을 포장 류 로 변환 합 니 다. 포장 류 유형 을 기본 데이터 형식 으로 변환 합 니 다. 특징: 1: 캐 시 자바 에 서 는 일부 기본 데이터 형식 에 대응 하 는 포장 류 의 일...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.