From 3fc4644f989f5a8326e5a2af8668507038c5cdb7 Mon Sep 17 00:00:00 2001 From: David Vierra Date: Sun, 29 Mar 2015 18:47:15 -1000 Subject: [PATCH] lru_cache: Remove key from self.queue on decache --- src/mceditlib/cachefunc.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/mceditlib/cachefunc.py b/src/mceditlib/cachefunc.py index f61a448..9814754 100644 --- a/src/mceditlib/cachefunc.py +++ b/src/mceditlib/cachefunc.py @@ -121,6 +121,13 @@ class lru_cache_object(object): key += (self.kwd_mark,) + tuple(sorted(kwds.items())) del self.cache[key], self.refcount[key] + # Remove all occurences of key from queue + try: + while True: + self.queue.remove(key) + except ValueError: # x not in deque + pass + def store(self, result, *args, **kwds): key = args if kwds: @@ -193,6 +200,7 @@ class lfu_cache_object(object): for key, _ in nsmallest(self.maxsize // 10, self.use_count.iteritems(), key=itemgetter(1)): + if self.should_decache is None or self.should_decache(self.cache[key]) is True: if self.will_decache is not None: self.will_decache(self.cache[key])