Python中如何使用信号量、条件变量和事件实现线程同步?
- 内容介绍
- 文章标签
- 相关推荐
本文共计993个文字,预计阅读时间需要4分钟。
信号量+信号量又称:Semaphore类代线程锁。同时只允许一个线程修改数据,而Semaphore是同时允许一定数量的线程修改数据,例如一个地方有3个座位,最多只允许3个人坐,后面的人只能等待。
信号量
信号量又称:Semaphore类 迭代锁同时只允许一个线程更改数据,而Semaphore是同时允许一定数量的线程更改数据,比如一个地方有3个座位, 那最多只允许3个人坐,后面的人只能等有人起来了才能再坐人
def run(n,semaphore): semaphore.acquire() #加锁 time.sleep(3) print('run the thread:%s\n' % n) semaphore.release() #释放 if __name__== '__main__': num=0 semaphore = threading.Semaphore(5) #最多允许5个线程同时运行 for i in range(10): t = threading.Thread(target=run,args=('t-%s' % i,semaphore)) t.start() while threading.active_count() !=1: pass else: print('all threads done')条件变量
Condition被称为条件变量,除了提供与Lock类似的acquire和release方法外,还提供了wait和notify方法。线程首先acquire一个条件变量,然后判断一些条件。
本文共计993个文字,预计阅读时间需要4分钟。
信号量+信号量又称:Semaphore类代线程锁。同时只允许一个线程修改数据,而Semaphore是同时允许一定数量的线程修改数据,例如一个地方有3个座位,最多只允许3个人坐,后面的人只能等待。
信号量
信号量又称:Semaphore类 迭代锁同时只允许一个线程更改数据,而Semaphore是同时允许一定数量的线程更改数据,比如一个地方有3个座位, 那最多只允许3个人坐,后面的人只能等有人起来了才能再坐人
def run(n,semaphore): semaphore.acquire() #加锁 time.sleep(3) print('run the thread:%s\n' % n) semaphore.release() #释放 if __name__== '__main__': num=0 semaphore = threading.Semaphore(5) #最多允许5个线程同时运行 for i in range(10): t = threading.Thread(target=run,args=('t-%s' % i,semaphore)) t.start() while threading.active_count() !=1: pass else: print('all threads done')条件变量
Condition被称为条件变量,除了提供与Lock类似的acquire和release方法外,还提供了wait和notify方法。线程首先acquire一个条件变量,然后判断一些条件。

