-
-
Save rootux/06d1a63ce6038645c9cad4d3dc416027 to your computer and use it in GitHub Desktop.
Revisions
-
rootux revised this gist
Jun 12, 2018 . 1 changed file with 0 additions and 2 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -29,11 +29,9 @@ def func(*args, **kwargs): key = (args, tuple(kw)) try: v = self.cache[key] if (time.time() - v[1]) > self.timeout: raise KeyError except KeyError: v = self.cache[key] = f(*args,**kwargs),time.time() return v[0] func.func_name = f.__name__ -
jh0ker created this gist
Nov 8, 2016 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,41 @@ #!/usr/bin/env python # Source: http://code.activestate.com/recipes/325905-memoize-decorator-with-timeout/#c1 import time class MWT(object): """Memoize With Timeout""" _caches = {} _timeouts = {} def __init__(self,timeout=2): self.timeout = timeout def collect(self): """Clear cache of results which have timed out""" for func in self._caches: cache = {} for key in self._caches[func]: if (time.time() - self._caches[func][key][1]) < self._timeouts[func]: cache[key] = self._caches[func][key] self._caches[func] = cache def __call__(self, f): self.cache = self._caches[f] = {} self._timeouts[f] = self.timeout def func(*args, **kwargs): kw = sorted(kwargs.items()) key = (args, tuple(kw)) try: v = self.cache[key] print("cache") if (time.time() - v[1]) > self.timeout: raise KeyError except KeyError: print("new") v = self.cache[key] = f(*args,**kwargs),time.time() return v[0] func.func_name = f.__name__ return func