描述:
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()
运行结果图:

3786

被折叠的 条评论
为什么被折叠?



