Skip to main content
 首页 » 编程设计

Python之创建一个使用 threading.lock() 锁定对象的类

2024年08月29日36birdshome

尝试创建一个可以使用 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 .这样,单个线程将能够根据需要多次获取锁,而不会出现死锁。