Python 线程信号量 semaphore - Python零基础入门教程

目录

  • 一.Python 线程信号量 semaphore 简介
  • 二.Python 线程信号量 semaphore 原理
  • 三.Python 线程信号量 semaphore 函数介绍
  • 四.Python 线程信号量 semaphore 使用
  • 五.猜你喜欢

零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门

一.Python 线程信号量 semaphore 简介

通过前面对 线程互斥锁 lock / 线程事件 event / 线程条件变量 condition / 线程定时器 timer 的讲解,相信你对线程 threading 模块已经有了一定的了解,同时执行多个线程的确可以提高程序的效率,但是并非线程的数量越多越好,可能对于计算机而言,你直接运行 20 ~ 30 线程可能没太大影响,如果同时运行上千个甚至上万个呢?我相信你电脑会直接瘫痪……

二.Python 线程信号量 semaphore 原理

多线程同时运行,能提高程序的运行效率,但是并非线程越多越好,而 semaphore 信号量可以通过内置计数器来控制同时运行线程的数量,启动线程**(消耗信号量)内置计数器会自动减一,线程结束(释放信号量)**内置计数器会自动加一;内置计数器为零,启动线程会阻塞,直到有本线程结束或者其他线程结束为止;

三.Python 线程信号量 semaphore 函数介绍

  • **acquire **— 消耗信号量,内置计数器减一;
  • **release **— 释放信号量,内置计数器加一;

在 semaphore 信号量有一个内置计数器,控制线程的数量,acquire 会消耗信号量,计数器会自动减一;release 会释放信号量,计数器会自动加一;当计数器为零时,acquire 调用被阻塞,直到 release 释放信号量为止。

四.Python 线程信号量 semaphore 使用

创建多个线程,限制同一时间最多运行 5 个线程,示例代码如下:

# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:猿说编程
@Blog(个人博客地址): www.codersrc.com
@File:Python 线程信号量 semaphore.py
@Time:2021/05/04 07:37
@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!"""# 导入线程模块
import threading
# 导入时间模块
import time# 添加一个计数器,最大并发线程数量5(最多同时运行5个线程)
semaphore = threading.Semaphore(5)def foo():semaphore.acquire()    #计数器获得锁time.sleep(2)   #程序休眠2秒print("当前时间:",time.ctime()) # 打印当前系统时间semaphore.release()    #计数器释放锁if __name__ == "__main__":thread_list= list()for i in range(20):t=threading.Thread(target=foo,args=()) #创建线程thread_list.append(t)t.start()  #启动线程for t in thread_list:t.join()print("程序结束!")'''
输出结果:当前时间: Tue May  4 12:01:43 2021
当前时间: Tue May  4 12:01:43 2021
当前时间: Tue May  4 12:01:43 2021
当前时间: Tue May  4 12:01:43 2021
当前时间: Tue May  4 12:01:43 2021
当前时间: Tue May  4 12:01:45 2021
当前时间: Tue May  4 12:01:45 2021
当前时间: Tue May  4 12:01:45 2021
当前时间: Tue May  4 12:01:45 2021
当前时间: Tue May  4 12:01:45 2021
当前时间: Tue May  4 12:01:47 2021
当前时间: Tue May  4 12:01:47 2021
当前时间: Tue May  4 12:01:47 2021
当前时间: Tue May  4 12:01:47 2021
当前时间: Tue May  4 12:01:47 2021
当前时间: Tue May  4 12:01:49 2021
当前时间: Tue May  4 12:01:49 2021
当前时间: Tue May  4 12:01:49 2021
当前时间: Tue May  4 12:01:49 2021
当前时间: Tue May  4 12:01:49 2021
程序结束!Process finished with exit code 0'''

根据打印的日志可以看出,同一时间只有 5 个线程运行,间隔两秒之后,再次启动 5 个线程,直到 20 个线程全部运行结束为止;如果没有设置信号量 Semapaore ,创建线程直接 start ,输出的时间全部都是一样的,这个问题比较简单,可以自己去实验一下!

五.猜你喜欢

  1. Python 条件推导式
  2. Python 列表推导式
  3. Python 字典推导式
  4. Python 函数声明和调用
  5. Python 不定长参数 *argc/**kargcs
  6. Python 匿名函数 lambda
  7. Python return 逻辑判断表达式
  8. Python 字符串/列表/元组/字典之间的相互转换
  9. Python 局部变量和全局变量
  10. Python type 函数和 isinstance 函数区别
  11. Python is 和 == 区别
  12. Python 可变数据类型和不可变数据类型
  13. Python 浅拷贝和深拷贝
  14. Python 文件读写操作
  15. Python 异常处理
  16. Python 模块 import
  17. Python __name__ == ‘__main__’详细解释

未经允许不得转载:猿说编程 » Python 线程信号量 semaphore

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/525351.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【有奖倒计时】带你走进AI应用创新大赛十强背后的故事!

时光如梭,截至今日距离?DigiX极客AI应用创新大赛十强争霸投票阶段只剩最后2天联盟君想问下你领到奖品了吗虽然战场无声无息,形势却如火如荼。13天来,我们感受到了众多花粉的热情,也感受到了用户们对高质量AI作品的喜爱。为投票准…

Python 线程障碍对象 Barrier - Python零基础入门教程

目录 一.Python 线程障碍对象 Barrier 简介二.Python 线程障碍对象 Barrier 原理三.Python 线程障碍对象 Barrier 函数介绍四.Python 线程障碍对象 Barrier 使用 1.案例一:常规使用2.案例二:重置线程障碍数量 reset 五.猜你喜欢 零基础 Python 学习路线…

BugkuCTF-PWN题pwn1-瑞士军刀

注意: nc ip 端口 敲完回车没有回显,直接输入ls命令然后cat 文件即可 得到flag

Cloud一分钟 | 加码云计算!IBM斥340亿美元收购Red Hat

Hello,everyone:10月29日早,星期一,祝大家工作愉快!一分钟新闻时间:完1.微信群:添加小编微信:tangguoyemeng,备注“进群姓名公司职位”即可,加入【云计算学习…

Python 线程队列 Queue – FIFO - Python零基础入门教程

目录 一.Python 线程队列分类二.Python 线程先进先出队列 Queue 简介三.Python 线程先进先出队列 Queue 常用函数四.Python 线程先进先出队列 Queue 使用五.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门 之前的文章中讲解很多关于线程间通…

BugkuCTF-WEB题网站被黑

利用御剑扫描后台或者通过dirsearch扫描一下目录看看 得到http://1147.67.246.176:15607/shell.php 打开这个网址 发现需要登录密码 通过Burp添加字典爆破密码为hack 输入得到flag

IBM 收购 RedHat(红帽)!340 亿美元

IBM今天宣布了以高达340亿美元的价格收购Red Hat,这笔交易在开源软件行业和云计算行业势必都会引起地震。Red Hat是将开源软件商业化的先驱之一,其采用的模式是,代码免费提供给其他公司使用,以便重新分发和修改。开源软件已逐渐成…

Python 线程队列 LifoQueue – LIFO - Python零基础入门教程

目录 一.Python 线程队列 Queue 分类二.Python 线程先进后出队列 LifoQueue 简介三.Python 线程先进后出队列 LifoQueue 函数介绍四.Python 线程先进后出队列 LifoQueue 使用五.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门 在 Python 线…

BugkuCTF-WEB题本地管理员

基础知识: base64: 是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一类基于64个可打印字符来表示二进制数据的方法。 XFF伪造请求头: X-Forwarded-For(XFF)是用来识别通过HTTP代理或负载均衡方式连接到Web服务器的…

你最关心的马蜂窝事件舆论全景图在这里,用文本挖掘一挖到底

原创作者:谭婧,苏格兰折耳喵企业作为社会基本的细胞,在守法盈利的同时,担负着服务消费者、社区、社会等利益相关方的重要责任。互联网企业是互联网时代的宠儿,举手投足备受关注。所谓成也萧何,败也萧何。大…

Kafka日志

位置 server.properties配置文件中通过log.dir指定日志存储目录 log.dir/{topic}-{partition} 核心文件 .log 存储消息的日志文件,固定大小为1G,写满后会新增一个文件,文件名表示当前日志文件记录的第一条消息的偏移量。 .index 以偏移…

BugkuCTF-WEB题源码

根据提示 查看源码 有URL编码 解码并将其拼接 有一个假flag提交 得到真flag

Python 线程优先队列 PriorityQueue - Python零基础入门教程

目录 一.Python 线程队列 Queue 分类二.Python 线程优先队列 PriorityQueue 简介三.Python 线程优先队列 PriorityQueue 函数介绍四.Python 线程优先队列 PriorityQueue 使用五.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门 在 线程队列…

Cloud一分钟 | 14万中国人基因大数据是否外泄?运营商发展大数据优势何在?

Hello,everyone:10月30日早,星期二,祝大家工作愉快!一分钟新闻时间:完1.微信群:添加小编微信:tangguoyemeng,备注“进群姓名公司职位”即可,加入【云计算学习…

BugkuCTF-Reverse题easy-100(LCTF)

下载附件,得到apk文件 一道安卓逆向题,JEB反编译,查看 MainActivity 分析可得,主函数会先执行 p 函数,创建了一个按钮监听事件在 classs d 里,class d 里的 onclick 函数,当我们点击安卓的按钮…

Python 线程池 ThreadPoolExecutor(一) - Python零基础入门教程

目录 一.Python 线程池前言二.Python 线程池原理三.Python 线程池 ThreadPoolExecutor 函数介绍四.Python 线程池 ThreadPoolExecutor 简单使用五.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门 一.Python 线程池前言 在前面的文章中我们…

Cloud一分钟 | 成本大增致谷歌财报蒙尘;Gartner发数据库魔力象限:阿里云成为黑马...

Hello,everyone:10月31日早,星期三,祝大家万圣节快乐!一分钟新闻时间:完1.微信群:添加小编微信:tangguoyemeng,备注“进群姓名公司职位”即可,加入【云计算学…

Python实现AES加密进行PKCS5Padding的填充

Python实现AES加密进行PKCS5Padding的填充 (1)Python 需要导入的模块 (2)AES加密代码 (3)AES解密代码 (4)测试代码 (5)测试结果

Python 线程池 ThreadPoolExecutor(二) - Python零基础入门教程

目录 一.Python 线程池前言二.Python 线程池 ThreadPoolExecutor 常用函数 1.线程池 as_completed 函数使用2.线程池 map 函数使用3.线程池 wait 函数使用 三.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门 一.Python 线程池前言 紧接着上…

Cloud一分钟 | 马云发表致股东的公开信;5G算什么?中国已着手研究6G相关工作...

Hello,everyone:11月01日早,星期四,新的一天祝大家工作愉快!一分钟新闻时间:完1.微信群:添加小编微信:tangguoyemeng,备注“进群姓名公司职位”即可,加入【云…