进程通信,队列,管道

【一】进程通信

1.多个进程之间的信息交换过程
2.如何实现(1)消息队列:把信息从一端放入队列中,另一个进程从另一端将消息取出非阻塞的,即发送进程不需要等待接收进程的响应即可继续执行。(2)管道:半双工的通信机制,同时只能一端进行发一端进行收,不能同时收发(3)队列(管道+锁):生产者-消费者模型。先进先出

【二】队列

(1)创建队列的类(底层就是以管道和锁定的方式实现)语法:import queueq = queue.Queue(maxsize)maxsize是队列中允许最大项数,省略则无大小限制。 from multiprocessing import Queueq = Queue(5)
(2)方法:
记住:队是先进先出的数据结构1.队列对象.put(数据)入队<--->相当于push,将数据放入到队列中如果blocked为True(默认值),并且timeout为正值,该方法会阻塞timeout指定的时间,直到该队列有剩余的空间。如果超时,会抛出Queue.Full异常如果blocked为False,但该Queue已满,会立即抛出Queue.Full异常。2.队列对象.get()出队<--->相当于pop,将数据读出并删除如果blocked为True(默认值),并且timeout为正值,那么在等待时间内没有取到任何元素,会抛出Queue.Empty异常。如果blocked为False,有两种情况存在,如果Queue有一个值可用,则立即返回该值,否则,如果队列为空,则立即抛出Queue.Empty异常.3.队列对象.get_nowait()=====  同q.get(False),但是当没有值时会报错4.队列对象.put_nowait()=====  同q.get(False),但是当队列满时会报错5.队列对象.empty()===判空6.队列对象.full()===判满7.队列对象.qsize()====判队列中数据的数量
"""full()empty()get_nowait()
上述方法能否在并发的场景下精准使用???不能用!!!之所以介绍队列是因为它可以支持进程间数据通信
"""
​

【三】管道

管道:半双工的通信机制,同时只能一端进行发一端进行收,不能同时收发
#Pipe
from multiprocessing import Pipe
# 创建管道对象,获取两个管道对象,可以用一个变量装到时候解包
left_pipe,right_pipe=Pipe()#默认参数dumplex:默认双通道管道
# 方法(都是要先关闭一端一端接或收)传递或接收完记得关闭刚刚在使用的管道
# (1)接收数据
"""
left_pipe.close()
right_pipe.recv()
# (2)发送数据
left_pipe.close()
right_pipe.send()

【四】进程间通信(IPC机制)

1.方式一:子进程与主进程之间通过队列进行通信直接把队列当作一个子进程进行存放消息from multiprocessing import Process, Queue
# 创建一个子进程函数
def producer(que_ue):# 子进程放入消息que_ue.put('子进程中放入了一条消息')print('这是主进程中的一个子进程的队列')
if __name__ == '__main__':# 【一】创建队列对象:注意这里是使用的 multiprocessing 里面的 Queueque_ue = Queue()# 【二】创建子进程:目标函数和参数带进去pro_cess = Process(target=producer, args=(que_ue,))# 【三】启动子进程pro_cess.start()# 【四】主进程获取消息msg_from_p = que_ue.get()
​# 【五】查看消息print(msg_from_p)# 这是主进程中的一个子进程的队列# 子进程中放入了一条消息2.方式二:子进程与子进程之间借助队列进行通信生产者消费者的思想,生产者往队列放消息,消费者从队列拿数据from multiprocessing import Process, Queue
# 创建一个子进程函数
def producer(que_ue):# 子进程放入消息que_ue.put('子进程中放入了一条消息')print('这是主进程中的一个子进程的队列')
def customer(que_ue):# 在另一个子进程中获取到非本子进程放入的消息msg_from_producer = que_ue.get()print('这是来自另一个子进程的消息 :>>>> ', msg_from_producer)
if __name__ == '__main__':# 【一】创建队列对象:注意这里是使用的 multiprocessing 里面的 Queueque_ue = Queue()# 【二】创建子进程:目标函数和参数带进去p_list = []pro_producer = Process(target=producer, args=(que_ue,))pro_customer = Process(target=customer, args=(que_ue,))# 【三】启动子进程pro_producer.start()pro_customer.start()
​pro_producer.join()pro_customer.join()
​# 这是主进程中的一个子进程的队列# 这是来自另一个子进程的消息 :>>>>  子进程中放入了一条消息

【四】生产者消费者模型

# 生产者负责生产/制作数据
# 消费者负责消费/处理数据
"""

4.1

【五】JoinableQueue模块

● JoinableQueue([maxsize]):这就像是一个Queue对象,但队列允许项目的使用者通知生成者项目已经被成功处理。
● 通知进程是使用共享的信号和条件变量来实现的。
from multiprocessing import JoinableQueueq = JoinableQueue()
​
# 方法介绍:JoinableQueue的实例p除了与Queue对象相同的方法之外还具有:
​
# q.task_done():使用者使用此方法发出信号,表示q.get()的返回项目已经被处理。如果调用此方法的次数大于从队列中删除项目的数量,将引发ValueError异常
​
# q.join():生产者调用此方法进行阻塞,直到队列中所有的项目均被处理。阻塞将持续到队列中的每个项目均调用q.task_done()方法为止

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

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

相关文章

架构每日一学 11:快手高级副总裁给年轻人的几点建议

文章首发于公众平台&#xff1a;腐烂的橘子 于冰毕业于清华大学&#xff0c;从 05 年开始接触音视频领域&#xff0c;到现在已经在垂直行业深耕将近 20 年。先后经历了两次创业&#xff0c;曾在 Hulu、FreeWheel 等公司专攻音视频领域&#xff0c;现任快手高级副总裁。 作为一…

JavaEE之线程(9) _定时器的实现代码

前言 定时器也是软件开发中的一个重要组件. 类似于一个 “闹钟”。 达到一个设定的时间之后&#xff0c;就执行某个指定好的代码&#xff0c;比如&#xff1a; 在受上述场景中&#xff0c;当客户端发出去请求之后&#xff0c; 就要等待响应&#xff0c;如果服务器迟迟没有响应&…

新能源汽车结构与原理

第一章 新能源汽车概述 1.1 电动汽车及新能源汽车定义 新能源汽车是指采用非常规的车用燃料作为动力来源&#xff08;或使用常规车用燃料、采用新型车载动力装置&#xff09;&#xff0c;综合车辆的动力控制和驱动方面的先进技术&#xff0c;形成的技术原理先进、具有新技术、…

大小字符判断

//函数int my_isalpha(char c)的功能是返回字符种类 //大写字母返回1&#xff0c;小写字母返回-1.其它字符返回0 //void a 调用my_isalpha()&#xff0c;返回大写&#xff0c;输出*&#xff1b;返回小写&#xff0c;输出#&#xff1b;其它&#xff0c;输出&#xff1f; #inclu…

【Linux】Linux的安装

文章目录 一、Linux环境的安装虚拟机 镜像文件云服务器&#xff08;可能需要花钱&#xff09; 未完待续 一、Linux环境的安装 我们往后的学习用的Linux版本为——CentOs 7 &#xff0c;使用 Ubuntu 也可以 。这里提供几个安装方法&#xff1a; 电脑安装双系统&#xff08;不…

深入解析力扣162题:寻找峰值(线性扫描与二分查找详解)

❤️❤️❤️ 欢迎来到我的博客。希望您能在这里找到既有价值又有趣的内容&#xff0c;和我一起探索、学习和成长。欢迎评论区畅所欲言、享受知识的乐趣&#xff01; 推荐&#xff1a;数据分析螺丝钉的首页 格物致知 终身学习 期待您的关注 导航&#xff1a; LeetCode解锁100…

virtual box ubuntu20 全屏展示

virtual box 虚拟机 ubuntu20 系统 全屏展示 ubuntu20.04 视图-自动调整窗口大小 视图-自动调整显示尺寸 系统黑屏解决 ##设备-安装增强功能 ##进入终端 ##终端打不开&#xff0c;解决方案-传送门ubuntu Open in Terminal打不开终端解决方案-CSDN博客 ##点击cd盘按钮进入文…

YoloV8改进策略:蒸馏改进|MGDLoss|使用蒸馏模型实现YoloV8无损涨点|特征蒸馏

摘要 在本文中&#xff0c;我们成功应用蒸馏策略以实现YoloV8小模型的无损性能提升。我们采用了MGDLoss作为蒸馏方法的核心&#xff0c;通过对比在线和离线两种蒸馏方式&#xff0c;我们发现离线蒸馏在效果上更为出色。因此&#xff0c;为了方便广大读者和研究者应用&#xff…

【RabbitMQ】使用SpringAMQP的Publish/Subscribe(发布/订阅)

Publish/Subscribe **发布(Publish)、订阅(Subscribe)&#xff1a;**允许将同一个消息发送给多个消费者 **注意&#xff1a;**exchange负责消息路由&#xff0c;而不是存储&#xff0c;路由失败则消息丢失 常见的**X(exchange–交换机)***类型&#xff1a; Fanout 广播Direc…

【设计模式】JAVA Design Patterns——Callback(回调模式)

&#x1f50d;目的 回调是一部分被当为参数来传递给其他代码的可执行代码&#xff0c;接收方的代码可以在一些方便的时候来调用它。 &#x1f50d;解释 真实世界例子 我们需要被通知当执行的任务结束时。我们为调用者传递一个回调方法然后等它调用通知我们。 通俗描述 回调是一…

JVM解释器和即时编译器的工作原理

1、解释器&#xff1a; 当Java程序启动时&#xff0c;JVM的解释器首先读取Java字节码&#xff08;通常存在于.class文件中&#xff09;。 解释器将字节码解析为相应的指令&#xff0c;每条指令对应JVM中的一个操作。 解释器根据指令的类型和操作数&#xff0c;执行相应的计算或…

试用百川智能的百小应-说的太多,做的太少

“百小应”的品牌标识&#xff08;logo&#xff09;上有一缕黄色&#xff0c;这是王小川特意设计的。他说&#xff0c;其他AI应用都在强调科技感&#xff0c;更愿意用蓝色或者冷色调。但他觉得这一代科技与上个时代不一样&#xff0c;现代科技应该像人&#xff0c;所以选择使用…

Java进阶学习笔记5——Static应用知识:单例设计模式

设计模式&#xff1a; 架构师会使用到设计模式&#xff0c;开发框架&#xff0c;就需要掌握很多设计模式。 在Java基础阶段学习设计模式&#xff0c;将来面试笔试的时候&#xff0c;笔试题目会经常靠到设计模式。 将来会用到设计模式。框架代码中会用到设计模式。 什么是设计…

linux常用软件源码安装-2

jdk、tomcat、Apache、nginx、mysql、redis、maven、nexus安装文档&#xff1a;linux常用软件源码安装 9.sonarqube安装 前置条件&#xff1a;mysql5.6和jdk8 1.下载 官网 2.安装unzip并解压sonarqube&#xff0c;然后移动到/usr/local yum install -y unzip unzip sonarq…

基于Matlab完整版孤立词识别系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景与意义 孤立词识别是语音识别领域的一个重要分支&#xff0c;其目标是将输入的语音信号转换为计算机可…

收入极高的副业兼职,单价179元的养生爆款卖出3000份

做养生赛道切忌不要只靠接广告变现&#xff0c;换个思路以产品为核心&#xff0c;走低粉高变现才是变现效率最高的。 周周近财&#xff1a;让网络小白少花冤枉钱&#xff0c;赚取第一桶金 今天&#xff0c;我们要分析的这位养生博主&#xff0c;仅凭一款售价为179元的温通膏&a…

excel poi的titleRows 和 headRows含义

titleRows 这个参数的意思是&#xff1a;excel标题占多少行&#xff0c;而不是第几行headRows 这个参数的意思是&#xff1a;excel表头占几行&#xff0c;而不是第几行&#xff08;多行的意思是合并的行数&#xff09; 比如有一个excel如下&#xff0c;1-2行是标题&#xff0c…

揭秘软件测试工程师:事业前景和成功秘诀

揭秘软件测试工程师&#xff1a;事业前景和成功秘诀 软件测试工程师&#xff08;Software Test Engineer&#xff09;在现代软件开发中扮演着至关重要的角色。主要负责确保软件产品的质量和可靠性&#xff0c;从而帮助企业降低风险、提高用户满意度。随着科技的进步和软件行业…

将 MOV 转换为 MP4 的 10 个最佳工具

在当今的数字时代&#xff0c;内容创作和消费正处于巅峰&#xff0c;对多功能和兼容媒体格式的需求从未如此之高。在众多可用的视频格式中&#xff0c;MOV 和 MP4 因其在各种设备和平台中的广泛使用而脱颖而出。然而&#xff0c;将 MOV 文件转换为更通用兼容的 MP4 格式的需求已…

运算符重载(上)

目录 运算符重载日期类的比较判断日期是否相等判断日期大小 赋值运算符重载赋值运算符重载格式赋值运算符只能重载成类的成员函数不能重载成全局函数用户没有显式实现时&#xff0c;编译器会生成一个默认赋值运算符重载&#xff0c;以值的方式逐字节拷贝 感谢各位大佬对我的支持…