X-Git-Url: https://wannabe.guru.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=decorator_utils.py;h=cd69639448425ce3a47073c7e423ea98d6704b2b;hb=a4bf4d05230474ad14243d67ac7f8c938f670e58;hp=1ecbce3e2b10003ecf315cbd9db0e04168860d49;hpb=e6f32fdd9b373dfcd100c7accb41f57d83c2f0a1;p=python_utils.git diff --git a/decorator_utils.py b/decorator_utils.py index 1ecbce3..cd69639 100644 --- a/decorator_utils.py +++ b/decorator_utils.py @@ -223,7 +223,7 @@ def debug_count_calls(func: Callable) -> Callable: logger.info(msg) return func(*args, **kwargs) - wrapper_debug_count_calls.num_calls = 0 + wrapper_debug_count_calls.num_calls = 0 # type: ignore return wrapper_debug_count_calls @@ -366,7 +366,7 @@ def memoized(func: Callable) -> Callable: logger.debug(f"Returning memoized value for {func.__name__}") return wrapper_memoized.cache[cache_key] - wrapper_memoized.cache = dict() + wrapper_memoized.cache = dict() # type: ignore return wrapper_memoized @@ -704,38 +704,19 @@ def timeout( return decorate -class non_reentrant_code(object): - def __init__(self): - self._lock = threading.RLock - self._entered = False - - def __call__(self, f): - def _gatekeeper(*args, **kwargs): - with self._lock: - if self._entered: - return - self._entered = True - f(*args, **kwargs) - self._entered = False +def synchronized(lock): + def wrap(f): + @functools.wraps(f) + def _gatekeeper(*args, **kw): + lock.acquire() + try: + return f(*args, **kw) + finally: + lock.release() return _gatekeeper - -class rlocked(object): - def __init__(self): - self._lock = threading.RLock - self._entered = False - - def __call__(self, f): - def _gatekeeper(*args, **kwargs): - with self._lock: - if self._entered: - return - self._entered = True - f(*args, **kwargs) - self._entered = False - - return _gatekeeper + return wrap def call_with_sample_rate(sample_rate: float) -> Callable: