原因:主要用在保护有限的资源。
假设当前数据库支持最大连接数为3,将信号量初始值设为3,那么同时最大可以有三个线程连接数据库,其他线程若再想连接数据库,则只有等待,直到某一个线程释放数据库连接。

注意:输出结果是每两秒打印的,跟数据库连接操作差的远呢

import logging
import threading
import time
import random
from threading import Semaphorelogging.basicConfig(level=logging.INFO,format="%(asctime)s [*] %(message)s"
)
threads = []
lock_sm = Semaphore(3)class connectdb(threading.Thread):def run (self):while True:lock_sm.acquire()logging.info(f"{self.name} connecting to db... ")logging.info(f"{self.name} released db...")time.sleep(2)lock_sm.release()if __name__ == '__main__':for i in range(5):threads.append(connectdb())# 从五个线程取出三个random_threads = random.sample(threads, 3)# 阻塞启动线程---------------------------for t in random_threads:t.start()for t in random_threads:t.join()

输出:

2019-10-02 17:31:38,851 [*] Thread-2 connecting to db...
2019-10-02 17:31:38,851 [*] Thread-2 released db...
2019-10-02 17:31:38,851 [*] Thread-4 connecting to db...
2019-10-02 17:31:38,851 [*] Thread-4 released db...
2019-10-02 17:31:38,851 [*] Thread-3 connecting to db...
2019-10-02 17:31:38,851 [*] Thread-3 released db...
2019-10-02 17:31:40,851 [*] Thread-2 connecting to db...
2019-10-02 17:31:40,851 [*] Thread-2 released db...
2019-10-02 17:31:40,852 [*] Thread-3 connecting to db...
2019-10-02 17:31:40,852 [*] Thread-3 released db...
2019-10-02 17:31:40,852 [*] Thread-4 connecting to db...
2019-10-02 17:31:40,854 [*] Thread-4 released db...
2019-10-02 17:31:42,853 [*] Thread-2 connecting to db...
2019-10-02 17:31:42,853 [*] Thread-2 released db...
2019-10-02 17:31:42,854 [*] Thread-3 connecting to db...
2019-10-02 17:31:42,854 [*] Thread-3 released db...
2019-10-02 17:31:42,855 [*] Thread-4 connecting to db...
2019-10-02 17:31:42,855 [*] Thread-4 released db...
2019-10-02 17:31:44,854 [*] Thread-2 connecting to db...
2019-10-02 17:31:44,854 [*] Thread-2 released db...
2019-10-02 17:31:44,855 [*] Thread-3 connecting to db...
2019-10-02 17:31:44,855 [*] Thread-3 released db...
2019-10-02 17:31:44,856 [*] Thread-4 connecting to db...
2019-10-02 17:31:44,856 [*] Thread-4 released db...

Python Threading Semaphore信号量(子线程的数量)相关推荐

  1. python主线程和子线程_python 在threading中如何处理主进程和子线程的关系

    之前用python的多线程,总是处理不好进程和线程之间的关系.后来发现了join和setDaemon函数,才终于弄明白.下面总结一下. 1.使用join函数后,主进程会在调用join的地方等待子线程结 ...

  2. 对Python threading.Thread(daemon=True)线程守护的理解

    最近在练习python多线程编程时发现,在子线程中设置sys.exit()无法退出整个线程,但是如果想达到此目的又不想使用 os._exit()这种暴力的方法,可以使用daemon线程守护.结合网上零 ...

  3. Python GUI库TKinter子线程与主线程控件传递消息策略

    TKinter GUI库没有像MFC那样的强制安全策略,在MFC中子线程无法直接控制主线程中的GUI控件,比如修改文本框或者按钮上的内容.因为如果只有2个线程,即一个主线程和一个子线程的情况下子线程直 ...

  4. python threading.Semaphore

    Semaphore 在内部管理着一个计数器.调用 acquire() 会使这个计数器 -1,release() 则是 +1.计数器的值永远不会小于 0,当计数器到 0 时,再调用 acquire() ...

  5. python threading 停止和暂停线程

    python的threading包,暂停线程.恢复线程,和停止线程的方法 import threading import timeclass Job(threading.Thread):def __i ...

  6. python 主线程 等待 子线程 知乎_[Python] 知乎多线程爬虫

    知乎多线程爬取问题: 自打放了寒假,我就一直想把系统的学习一遍Python爬虫的知识.因为以前只是零碎的学习,造成许多东西都只是一知半解. 项目灵感来源是觉得单曲循环的歌至少让一个人曾经在聆听中感动过 ...

  7. python内容限制_Python 限制线程的最大数量的方法(Semaphore)

    Python 限制线程的最大数量的方法(Semaphore) 更新时间:2019年02月22日 09:33:30 作者:houyanhua1 今天小编就为大家分享一篇Python 限制线程的最大数量的 ...

  8. python创建多线程_Python 多线程,threading模块,创建子线程的两种方式示例

    本文实例讲述了Python 多线程,threading模块,创建子线程的两种方式.分享给大家供大家参考,具体如下: GIL(全局解释器锁)是C语言版本的Python解释器中专有的,GIL的存在让多线程 ...

  9. python主辅线程_python主线程捕获子线程的方法

    最近,在做一个项目时遇到的了一个问题,主线程无法捕获子线程中抛出的异常. 先看一个线程类的定义 ''''' Created on Oct 27, 2015 @author: wujz ''' impo ...

最新文章

  1. Modelsim初级使用教程
  2. 49.检测对象是否为原始对象
  3. html绑定按键图片移动,如何使用JS实现用键盘控制图片移动呢?
  4. windows远程桌面mstsc使用 代理
  5. redis sds的申请扩容源码
  6. 戴尔科技集团公布 2019 财年第四季度及全年财报,巨大进步和强劲发展的一年...
  7. Web 端使用融云 SDK 集成实现滑动加载历史消息
  8. PCF8563实时时钟芯片51单片机简单例程
  9. 批量制作学校图书馆条码标签
  10. jenkins集成自动化配置(二) 创建项目和项目配置
  11. 一侧肩膀怕风吹怎么办
  12. EDA技术试验二:组合逻辑电路设计、仿真与实现实验
  13. 各类Java高质量学习网址
  14. 计算机网络(2)传输层
  15. ClassNotFoundException: org.codehaus.plexus.logging.LoggerManager
  16. NETGEAR拒绝连接请求_iOS 14:为什么APP请求本地网络?想要扫描本地网络追踪
  17. 人心难测——远离垃圾人
  18. 杜克大学计算机专业本科入学条件,杜克大学本科申请条件有哪些?
  19. OpenCV教程(转自:浅墨_毛星云博客)
  20. 阿里云弹性计算产品总监王志坤:在分布式云领域的产品布局和最佳实践

热门文章

  1. 复印一本200页的数学题多少钱
  2. java 队列大小_队列以及JAVA实现
  3. 布局年轻市场,三星Galaxy A9 Star系列引领手机市场年轻化潮流
  4. 【C4D周练作业041-050】希望量变能有质变~
  5. Oracle “column ambiguously defined ” 错误
  6. 【3DMax】细节2【修改物体坐标中心】
  7. 伪静态与重定向--RewriteRule解释的比较清楚
  8. 《Miss Talk》第03期:对话学霸君吴凯
  9. Synthetic合成方法学习
  10. iOS 的一些资源汇总