From f53eeed63b9b3b694008b171e857f3283329ec8c Mon Sep 17 00:00:00 2001 From: Andrey Golovizin Date: Tue, 2 Sep 2014 16:49:19 +0200 Subject: [PATCH] Fix memory leak in cached_property. --- pixelocr/utils.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/pixelocr/utils.py b/pixelocr/utils.py index 239f10e..0253761 100644 --- a/pixelocr/utils.py +++ b/pixelocr/utils.py @@ -23,11 +23,14 @@ from threading import Lock def cached_property(fun): """A memoize decorator for class properties.""" lock = Lock() - locks = defaultdict(Lock) @functools.wraps(fun) def get(self): with lock: - obj_lock = locks[self, fun] + try: + obj_locks = self._locks + except AttributeError: + obj_locks = self._locks = defaultdict(Lock) + obj_lock = obj_locks[fun] with obj_lock: try: cache = self._cache