尝试创建一个可以使用 threading.lock 锁定对象的类:
class ObjectLock(object):
def __init__(self):
self._lock = threading.Lock()
self._value = False
def __str__(self):
self.acquire()
try:
if(self._value):
return self._value
else:
return self._value
finally:
self.release()
def __enter__(self):
self.acquire()
def __exit__(self, type, value, traceback):
self.release()
def acquire(self):
self._lock.acquire()
def release(self):
self._lock.release()
def locked(self):
return self._lock.locked()
lock = ObjectLock()
print(lock)
with lock:
print (lock)
问题是我正在尝试实现“with”。如果在“with” block (例如 str)中调用了一个方法,则重新获取锁...这很糟糕。我必须创建一组单独的方法来调用吗?知道我在锁内工作吗?
请您参考如下方法:
首先,我不明白为什么 __str__ 需要获取锁,所以我认为这个前提没有实际意义。
如果您确定内部锁定是可取的,请考虑使用可重入锁,例如threading.RLock .这样,单个线程将能够根据需要多次获取锁,而不会出现死锁。
