本文主要是介绍python多线程之信号量semaphore实战,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
描述:
semaphore是python中的一个内置的计数器,
在程序中调用acquire()时,内置计数器-1
调用release()时,内置计数器+1
计数器不能小于0,小于0初始化报错,当计数器为0时,acquire()将阻塞线程直到其他线程调用release()
使用场景:
主要用在控制程序运行的线程数,防止密集CPU、IO、内存过高
代码实例:
#以下代码为控制程序最大运行的线程数为3个,同时最多3个线程并发执行
import threading import timeclass Task(threading.Thread): #子线程,模拟耗时任务,任务结束时释放信号量def __init__(self, parm, sem):super().__init__()self.url = parmself.sem = semdef 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 = semdef 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()
运行结果图:
这篇关于python多线程之信号量semaphore实战的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!