本文共 1004 字,大约阅读时间需要 3 分钟。
描述:
semaphore是python中的一个内置的计数器,
在程序中调用acquire()时,内置计数器-1
调用release()时,内置计数器+1
计数器不能小于0,小于0初始化报错,当计数器为0时,acquire()将阻塞线程直到其他线程调用release()
使用场景:
主要用在控制程序运行的线程数,防止密集CPU、IO、内存过高
代码实例:
#以下代码为控制程序最大运行的线程数为3个,同时最多3个线程并发执行
import threadingimport timeclass 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通知acquireclass 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()
运行结果图:
转载地址:http://wzagi.baihongyu.com/