Folks, I have this decorator:

def memoize(maxsize):
   def _memoize(func):
       lru_cache = {}
       lru_list = []

       def memoizer(*args, **kwargs):
           key = str(args) + str(kwargs)
           if key in lru_cache:
               lru_list.remove(key)
               lru_list.append(key)
               return lru_cache[key]
           print len(lru_list),
           if len(lru_list) >= maxsize:
               del(lru_cache[lru_list[0]])
               del(lru_list[0])
           ret = func(*args, **kwargs)
           lru_cache[key] = ret
           lru_list.append(key)
           return ret
       return memoizer
   return _memoize

I didn't used to do the 'len(lru_list) >= maxsize' just '==' and noticed it sailing past the max number of entries, so put in the print statement, and now I see it ocationally printing a value 1 larger than maxsize !!!

So if I use it as '@memoize(64)' I see some 65's in the output ! I'm at a loss to explain it, does anyone knows why ? Is it a bug or some threading issue ? I'm not useing threads BTW, and I've noticed this in both running it with Python or Pypy.

Best Regards

Chris

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to