python多线程之使用ReadWriteLock,,ReadWriteLoc


ReadWriteLock是指允许多个线程同时读,但是只允许一个线程写

import threadingclass ReadWriteLock:    """A lock object that allows many simultaneous "read-locks", but    only one "write-lock"."""    def __init__(self):        self._read_ready = threading.Condition(threading.Lock())        self._readers = 0    def acquire_read(self):        """Acquire a read-lock. Blocks only if some thread has        acquired write-lock."""        self._read_ready.acquire()        try:            self._readers += 1        finally:            self._read_ready.release()    def release_read(self):        """Release a read-lock."""        self._read_ready.acquire()        try:            self._readers -= 1            if not self._readers:                self._read_ready.notifyAll()        finally:            self._read_ready.release()    def acquire_write(self):        """Acquire a write lock. Blocks until there are no        acquired read- or write-locks."""        self._read_ready.acquire()        while self._readers > 0:            self._read_ready.wait()    def release_write(self):        """Release a write-lock."""        self._read_ready.release()

这个方法经常用来实现在不写的状态下允许对资源无限读,但要独占写锁。 因为python的threading模块中没有对应实现,上面的方法是通过Condition实现的。

评论关闭