Вы можете просто использовать подход «имеет блокировку» по сравнению с подходом «является блокировкой», например:
import threading, traceback, sys
class DebugLock(object):
def __init__(self):
self._lock = threading.Lock()
def acquire(self):
print >>sys.stderr, "acquired", self
#traceback.print_tb
self._lock.acquire()
def release(self):
print >>sys.stderr, "released", self
#traceback.print_tb
self._lock.release()
def __enter__(self):
self.acquire()
def __exit__(self, type, value, traceback):
self.release()
, где я включил соответствующие средства защиты контекста, так как вы, вероятно, хотите использоватьwith
синтаксис с вашими замками (кто бы не стал?).
Использование показано ниже:
>>> lock = DebugLock()
>>> with lock:
... print "I'm atomic!"
...
acquired <__main__.DebugLock object at 0x7f8590e50190>
I'm atomic!
released <__main__.DebugLock object at 0x7f8590e50190>
>>>