class _RLock(object): def __init__(self): self._lock = ReentrantLock() self.__owner = None def acquire(self, blocking=1): if blocking: self._lock.lock() self.__owner = currentThread() return True else: return self._lock.tryLock() def __enter__(self): self.acquire() return self def release(self): assert self._lock.isHeldByCurrentThread(), \ "release() of un-acquire()d lock" self.__owner = None self._lock.unlock() def __exit__(self, t, v, tb): self.release() def locked(self): return self._lock.isLocked() def _is_owned(self): return self._lock.isHeldByCurrentThread()