Python—创建一个使用threading.lock()锁定对象的类
尝试创建可以使用threading.lock锁定对象的类:Python—创建一个使用threading.lock()锁定对象的类,python,multithreading,locking,Python,Multithreading,Locking,尝试创建可以使用threading.lock锁定对象的类: class ObjectLock(object): def __init__(self): self._lock = threading.Lock() self._value = False def __str__(self): self.acquire() try: if(self._value):
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”块中调用某个方法(如str),则会重新获得锁…这是不好的。当我知道自己在锁中工作时,是否必须创建一组单独的方法来调用?首先,我不明白为什么
\u str\u
需要获取锁,因此我认为前提是没有意义的
如果你确信内部锁定是可取的,考虑使用一个可重入的锁,例如,这样一个线程就可以在不死锁的情况下多次获得锁。
使用可重入锁(线程)。
使用。这是一个可重入的锁,允许同一线程多次获取锁,而不是使用线程锁
我是否必须创建一个单独的方法集,以便在我知道自己在调用时调用
在锁内工作
不需要。这已经为您完成了。threading.RLock
类(可重入锁)为您解决了这个问题,它实现了与lock
相同的接口
R
字符将神奇地将您的问题挥手而去。在我重新编辑代码之前,您可能已经看到了代码。self.\u值与锁定状态无关