信号量:信号量可以理解为多把锁,同时允许多个线程来更改数据。而互斥锁同时只允许一个线程更改数据。
例子:
import threading,time def run(n): semaphore.acquire() #获取信号量 time.sleep(1) #每隔1秒弹出一次运行结果 print("run the thread: %s"%n) semaphore.release() #释放信号量 if __name__=='__main__': semaphore=threading.BoundedSemaphore(6) #声明semaphore实例,每次允许6个线程同时运行 for i in range(30): #循环30个线程 t=threading.Thread(target=run,args=(i,)) #定义线程 t.start() #启动线程 while threading.active_count!=1: #作用相当于join()等待线程执行完毕,如果活跃数为1,则说明只有主线程 pass else: print("---all threads have done")