From 5f1273fd18b89cdc59e580f5e2c9c2eef0df8049 Mon Sep 17 00:00:00 2001 From: Andrey Golovizin Date: Sat, 30 Aug 2014 20:51:17 +0200 Subject: [PATCH] Fix deadlocks in cached_property(). --- pixelocr/utils.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/pixelocr/utils.py b/pixelocr/utils.py index 4a6c98e..239f10e 100644 --- a/pixelocr/utils.py +++ b/pixelocr/utils.py @@ -16,20 +16,18 @@ import functools import itertools +from collections import defaultdict from threading import Lock def cached_property(fun): """A memoize decorator for class properties.""" lock = Lock() - locks = {} + locks = defaultdict(Lock) @functools.wraps(fun) def get(self): with lock: - try: - obj_lock = self._lock - except AttributeError: - obj_lock = self._lock = Lock() + obj_lock = locks[self, fun] with obj_lock: try: cache = self._cache