- Semaphore信号量的使用
信号量:
互斥锁 同时只允许一个线程更改数据,而Semaphore是同时允许一定数量的线程更改数据 ,比如厕所有3个坑,那最多只允许3个人上厕所,后面的人只能等里面有人出来了才能再进去。
使用场景:
mysql连接池,线程池。可以在同一时刻放入多少线程。
Semaphore模板:
import threading,time def run(n): # 获取一坨信号量 semaphore.acquire() time.sleep(1) print("run the thread: %s " %n) # 释放信号量 semaphore.release() if __name__ == '__main__': # 声明信号量实例 # 最多允许5个线程同时运行 semaphore = threading.BoundedSemaphore(5) for i in range(20): t = threading.Thread(target=run,args=(i,)) t.start() # 1个线程以上就成立 while threading.active_count() != 1: pass else: print('----all threads done---')