进程_线程 之(四) --- 信号量和队列

信号量

信号量:

  信号量就对线程最大并发数做限制,

  如果当前线程开启的个数超过了线程最大并发量,

  超出的线程要暂停执行,直到有线程执行完成,才加入新的线程

代码

 1 import threading
 2 from time import sleep
 3 
 4 # 定义一个信号量(线程的最大并发量)
 5 sem = threading.Semaphore(2) # 允许2个线程并发执行
 6 
 7 def func():
 8     with sem:  # 设置并发量。防止并发访问亮过载,影响服务器
 9         print("当前线程%s正在执行..."%threading.current_thread().name)
10         sleep(2)
11         print("当前线程%s执行结束"%threading.current_thread().name)
12 
13 if __name__ == '__main__':
14     for _ in range(5):     # 开启五个线程
15         t = threading.Thread(target=func)
16         t.start()

结果

 1 结果:
 2 """
 3   当前线程Thread-1正在执行...
 4   当前线程Thread-2正在执行...
 5   当前线程Thread-1执行结束
 6   当前线程Thread-2执行结束
 7   当前线程Thread-3正在执行...
 8   当前线程Thread-4正在执行...
 9   当前线程Thread-3执行结束
10   当前线程Thread-4执行结束
11   当前线程Thread-5正在执行...
12   当前线程Thread-5执行结束
13 """

 队列

  • 介绍

  线性结构:栈 和 队列  

    栈:先进后出, 

    队列:先进先出,

  哈希结构:字典,散列结构

  • 代码
 1 from queue import Queue
 2 
 3 # 创建一个队列。参数代表对列的长度,如果不传默认对列可以无限长
 4 q = Queue(6)
 5 
 6 # 向队列中添加内容
 7 q.put("马云")
 8 q.put("马化腾")
 9 q.put("马赛克")
10 q.put("李嘉诚")
11 q.put("老王")
12 q.put("大头儿子")
13 
14 print(q.full())  # 队列是否已满
15 print(q.empty()) # 队列是否为空
16 print(q.qsize()) # 队列的数据量
17 
18 q.put("小头爸爸") # 如果队列已满,程序就会暂停等待
19 
20 # 向队列取出数据
21 print(q.get())
22 print(q.get())
23 print(q.get())
24 print(q.get())
25 print(q.get())
26 print(q.get())
27 
28 print(q.get()) # 如果队列已空,再出队就进入等待状态

 

转载于:https://www.cnblogs.com/TMMM/p/11379286.html

【Linux】进程间通信——消息队列、共享内存与信号量 【Linux】进程间通信 阅读详情

相关推荐

进程、线程和协程详解

进程、线程和协程

十分甜咖啡 2976

Linux消息队列与信号量

2、如果信号量的值等于0,说明没有资源可使用,此时进程进入休眠,直到信号量的值大于0,进程会被唤醒,执行步骤1。概念:消息队列是由内核负责维护管理的链式数据队列,不是根据先后顺序出队,而是根据消息类型进行收发数据。概念:由内核管理的一个"全局变量",用于记录共享资源的数量,限制进程对共享资源的访问使用。1、如果信号量的值大于0,说明可以使用资源,使用时需要信号量-1,然后再使用。3、当资源使用完毕,把信号量的值+1,正在休眠的进程就会被唤醒。

sorryking_的博客 390

linux下多线程间通信之信号量,消息队列的综合运用

一、消息队列介绍 消息队列是消息的链接表,存放在内核中。其实质上就是一个内核链表,消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法。Linux用宏MSGMAX和MSGMNB来限制一条消息的最大长度和一个队列的最大长度。对消息队列有写权限的进程可以按照一定的规则添加新消息;对消息队列有读权限的进程则可以从消息队列中读出消息。消息队列是随内核持续的并和进程相关, 系统中

GQ1900的博客 6588

多线程实战(线程组+信号量+操作队列)

生产问题: 1. 上传100个psd 2. 每个psd内 100个图 3. 需要知道上传完每个psd 和 所有psd的时 思路: 1. n个psd之间使用串行处理; 2. psd中的n个图片使用并发处理, 使用信号量控制并发数; 3. 图片上传内部又有3个异网络请求, 使用线程组实现穿透同步; psd实现类: //头文件 @interface PSDModel : NSObject //psd开始时间 @property (nonatomic, strong) NSSt

Batac的博客 357

Linux 程序、进程和线程

程序、进程和线程一、程序、进程和线程的概念程序和进程的差别Linux环境下的进程进程和线程二、进程产生的方式进程号进程复制fork()函数system()函数方式进程执行exec()函数系列所有用户态进程的产生进程init三、进程间通信和同步半双工管道命名管道消息队列消息队列的一个例子信号量共享内存信号四、 Linux下的线程多线程编程实例Linux下线程创建函数pthread_create()线程的结束函数pthread_join()和函数pthread_exit()线程的属性线程间的互斥线程中使用信号量

weixin_50866517的博客 2864

EXI编解码避坑指南:ISO15118-2协议中3条异常命令的差异分析

本文深度剖析了ISO15118-2协议测试中EXI编解码的典型问题,聚焦于ChargeParameterDiscoveryRes、CertificateInstallationReq和MeteringReceiptReq三条命令在不同工具间产生109字节差异的现象。通过对比EXICodec.jar、OpenEXI和Efficient XML的输出,揭示了差异根源于EXI报头处理机制与模式文件完整性,并提供了从现象确认、根因分析到解决方案的标准化排查流程,助力协议测试工程师确保编解码一致性与通信可靠性。

algae的博客 411

信号量与消息队列的区别

任务间通信:可以通过全局变量、信号量、消息队列来完成。 全局变量   :虽然可以承载通信的内容,但是接收方无法意识到信息的到达,除非发送方向接收方发送一个信号量,或者接收方不断检测该全局变量 信号量      :可以通知接收方某个事件的发生,但无法传递具体事件内容,形象的说就像我们只拨通别人的手机而不与之通话 消息队列   : 可以通知接收方某个事件的发生,但并告知接收方事件内容,形象的说就像我们...

weixin_33754065的博客 589

QKD(量子密钥分发)

量子密钥分发(Quantum Key Distribution,QKD)是一种基于量子力学原理的安全通信协议,它允许两个用户通过不安全的通信信道创建并共享一个安全的密钥。这个密钥随后可以用于加密和解密信息,确保通信的机密性。QKD的核心原理是量子不可克隆定理和量子测量的不确定性。

qq_40844444的博客 2896

【Linux】:多线程(POSIX 信号量 、基于环形队列的生产消费者模型)

这篇文章主要介绍了 POSIX 信号量,并且将其与之前我们学习System V信号量作了比较,最后还对我们之前的生产者消费者进行了一些补充,用环形队列来进行实现

island1314的博客 3270

【自然语言处理】【聚类】TELL:可解释神经聚类

超越分类的XAI:可解释神经聚类 《XAI Beyond Classification: Interpretable Neural Clustering》 论文地址:https://www.jmlr.org/papers/volume23/19-497/19-497.pdf 一、简介 ​ 本文研究了可解释AI(XAI\text{XAI}XAI)和数据聚类这两个挑战性问题。第一个问题是如何设计一种具有固定可解释性的神经网络,而不是给出一个黑盒模型的事后解释。第二个问题是,使用可微分神经网络来实现离散的k-me

bqw的博客 4138

Cartographer从安装到实战:手把手教你运行2D/3D建图与定位

本文提供了一份详尽的Cartographer从零安装到实战应用的完整指南。内容涵盖环境准备、依赖编译、源码构建等关键步骤,并手把手指导读者运行2D/3D官方数据集进行建图与定位测试。文章深入解析了参数配置与自定义数据适配方法,帮助开发者快速掌握这一强大的实时同步定位与建图工具,并将其应用于机器人导航与自动驾驶等实际场景。

rice5的博客 951

线程通信和进程通信区别(线程进程区别)

前言:腾讯笔试中多道选择题考到这个问题,这里总结一下。学习Java的童鞋可能对于线程的理解要比学php好很多。本文参考于线程通信与进程通信的区别 。 进程和线程的区别:对于进程来说,子进程是父进程的复制品,从父进程那里获得父进程的数据空间,堆和栈的复制品。而线程,相对于进程而言,是一个更加接近于执行体的概念,可以和同进程的其他线程之间直接共享数据,而且拥有自己的栈空间,拥有独立序列。共同点: 它们

Fhang 7330

【以太网硬件一】802.3xx标准怎么这么多?它们有什么关系?

IEEE 802.3标准发展历史简介

highman110的博客 5017

Linux:进程间通信---消息队列&&信号量

本章深入探讨了System V进程间通信的两种方式:消息队列和信号量。消息队列通过允许不同进程向内核发送带类型的数据块实现通信,其系统接口包括创建、修改、发送和接收数据等功能。信号量则是一个计数器,用于管理对共享资源的访问,确保资源的互斥使用。本章还讨论了进程间通信的内核数据结构设计,包括IPC资源的管理机制。最后,本章强调了信号量在进程间通信中的重要性,尽管它不直接传输数据,但通过资源管理实现进程间的协同。

知北游天的博客 3159

Misc-RAR隐写

题目来自于:XCTF的SimpleRAR,由于涉及到许多新知识,所以写篇小文子记录一下。 一、下载完后是一个压缩包。 里面就有一个flag.txt,打开之后发现有一串字符是flag is not here,而且我们查看他的文件大小,只要十六字节,绝对不可能再藏着什么信息了。 然后把压缩包拉到010editor里面,发现一下子出来好多新的内容,很明显是有夹杂着的附加文件。 二、rar文件头信息。 rar 是由一个一个 block 组成的,每个 block 有以下几个部分 ...

admin的博客 1361

用 SAP Fiori Launchpad Content Manager 做目录传输:把 Catalog 变更稳稳送到目标系统

摘要:SAP Fiori项目中,目录传输是确保应用一致交付的关键环节。开发团队常遇到目录在不同系统/客户端间不一致的问题,核心在于理解Launchpad内容管理的两种作用域:系统级(/UI2/FLPCM_CONF)使用workbench请求跨系统传输,客户端级(/UI2/FLPCM_CUST)通过customizing请求按SCC4设置传输。混淆作用域会导致目录分叉,如系统级目录被客户端本地修改后形成独立副本。官方推荐使用Content Manager而非过时的Launchpad Designer,并强调手

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 105

【Linux】进程间通信(四)消息队列、信号量与内核管理ipc资源机制

本文详解 System V 标准下三种 IPC 机制:消息队列(小块数据块通信)、信号量(原子计数器实现同步互斥)、共享内存(高效内存共享),介绍其指令 / 代码接口,剖析临界资源与临界区概念,并揭示内核通过 ipc_id_ary 数组统一管理 IPC 资源的底层逻辑。

2501_90265152的博客 1997

【量化入门】Tushare库获取公募基金的历史净值

在本文中,我们将介绍如何使用Python的Tushare库获取公募基金的历史净值。

木头大左的博客 1143

【Linux】消息队列和信号量

消息队列是一种 进程间通信机制,允许不同进程通过 消息(数据块) 进行异步通信。消息队列中的消息按照先进先出(FIFO) 的方式存储,并由一个进程写入(发送),另一个进程读取(接收)。DATA需要用结构体包装起来,不能裸发数据,因为需要标识生产者和消费者的属性。信号量是一种用于进程同步和互斥的机制,常用于控制多个进程或线程对共享资源的访问。它可以防止竞争条件(race condition)导致的数据不一致问题。什么是同步?多个执行流在访问临界资源的时候,具有一定的顺序性,这就叫做同步。

2301_79969994的博客 1574

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

【Linux】多线程6——POSIX信号量,环形队列cp问题

此时由于生产者生产的很快,运行代码后一瞬间生产者就将环形队列打满了,此时生产者想要再进行生产,但空间资源已经为0了,于是生产者只能在blank_sem的等待队列下进行阻塞等待,直到由消费者消费完一个数据后对blank_sem进行了V操作,生产者才会被唤醒进而继续进行生产。虽然消费者消费的很快,但一开始环形队列当中的数据资源为0,因此消费者只能在data_sem的等待队列下进行阻塞等待,直到生产者生产完一个数据后对data_sem进行了V操作,消费者才会被唤醒进而进行消费。

2301_80224556的博客 2339

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

[Linux][多线程][四][线程同步][POSIX信号量][环形队列生产者消费者模型][线程池]

[Linux][多线程][四][线程同步][POSIX信号量][环形队列生产者消费者模型][线程池]

SnowK博客 5941

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

进程和线程的几种通信方式

进程之间通信的几种方式和线程之间的通信方式,以及Java中创建多线程的几种方式

weixin_40701758的博客 7429

【linux】信号量与PV操作 (进程和线程的同步)

在计算机操作系统中,PV操作是进程管理中的难点。 1、基本含义 什么是信号量?信号量(semaphore)的数据结构为一个值和一个指针,指针指向等待该信号量的下一个进程。信号量的值与相应资源的使用情况有关。当它的值大于0时,表示当前可用资源的数量;当它的值小于0时,其绝对值表示等待使用该资源的进程个数。 PV操作的含义:PV操作由P操作原语和V操作原语组成(原语是不可中断的过程),对信号量进行操作,具体定义如下: P(S):①将信号量S的值减1,即S=S-1; ...

我的笔记本 7593

Linux 线程:信号量、环形队列、线程池

Linux 线程:信号量、环形队列、线程池

Han同学 1726
上一篇: 进程_线程 之(三) --- 线程安全
下一篇: 爬与反爬
baoding4359
博客等级 码龄11年 2粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值