博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python多线程之信号量semaphore实战
阅读量:4287 次
发布时间:2019-05-27

本文共 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/

你可能感兴趣的文章
html入门之meta
查看>>
Spring源码和jar包下载步骤
查看>>
一位资深程序员大牛给予Java初学者的学习路线建议
查看>>
spring中bean的自动装配和作用域
查看>>
使用http请求,中文乱码问题--解决方法
查看>>
mybatis入门之接口式编程
查看>>
html页面中iframe嵌套页面的父页面和子页面js方法互相调用
查看>>
求字符串中变换位置问题
查看>>
求这个字符串中的最大的数字字符串
查看>>
Spring报错:java.lang.ClassCastException: com.sun.proxy.$Proxy2 cannot be cast to *
查看>>
Java一键启动Linux上的tomcat服务器
查看>>
java实现导出excel表到磁盘上(三)---完整封装,可直接使用
查看>>
json.loads
查看>>
快速截屏小工具
查看>>
如何用github发布Axure原型
查看>>
selenium RC+JAVA 运行所遇到的问题
查看>>
python运行时提示WebDriverException: Message: 'geckodriver' executable needs to be in PATH.
查看>>
selenuim +python环境配置遇到的诸多问题
查看>>
selenium + python自动化测试环境搭建
查看>>
轻松自动化---selenium-webdriver(python) (一)
查看>>