|
import time
import hashlib
import pickle
from itertools import chain
cache ={}
def is_obsolete(entry, duration):
return (time.time()-entry['time'] > duration)
def compute_key(F, args, kw):
key = pickle.dumps((F.__name__, args,kw))
return hashlib.update(key).hexdigest()
def memoize(duration=10):
def _memoize1(F):
def _memoize2(*args, **kw):
key = compute_key(F, args, kw)
#if it get ?
if (key in cache and not is_obsolete(cache[key], duration)):
print("we got a winner")
return cach[key]['value']
#count
result = F(*args, **kw)
#save result
cache[key] = {'value':result, 'time':time.time()}
return result
return _memoize2
return _memoize1
@memoize
def very_very_very_complex_stuff(a,b):
return a+b
verycomplex1 = very_very_very_complex_stuff(1,2)
verycomplex2 = very_very_very_complex_stuff(1,2)
print(verycomplex1)
print(verycomplex2) |
|