描述:
semaphore是python中的一个内置的计数器,
在程序中调用acquire()时,内置计数器-1
调用release()时,内置计数器+1
计数器不能小于0,小于0初始化报错,当计数器为0时,acquire()将阻塞线程直到其他线程调用release()
使用场景:
主要用在控制程序运行的线程数,防止密集CPU、IO、内存过高
代码实例:
#以下代码为控制程序最大运行的线程数为3个,同时最多3个线程并发执行
import threading import time class Task(threading.Thread): #子线程,模拟耗时任务,任务结束时释放信号量 def __init__(self, parm, sem): super().__init__() self.url = parm self.sem = sem def run(self): time.sleep(2) print("doing something pay time") self.sem.release() # 内部维护的计数器加1,并通知内部维护的conditon通知acquire class TaskProducer(threading.Thread): # 子线程,同时创建多个任务子线程(如果线程不阻塞) def __init__(self, sem): super().__init__() self.sem = sem def run(self): for i in range(20): self.sem.acquire() # 内部维护的计数器减1,到0就会阻塞 task_thread = Task("{}".format(i), self.sem) task_thread.start() if __name__ == "__main__": sem = threading.Semaphore(3) #设置同时最多3个 task_producer = TaskProducer(sem) task_producer.start()
运行结果图: