Python进程的通信Queue、Pipe实例分析
作者:随风行云 发布时间:2021-11-22 13:50:44
本文实例讲述了Python进程的通信Queue、Pipe。分享给大家供大家参考,具体如下:
内容相关:
概念:进程的通信
Queue:创建与使用
Pipe:创建与使用
进程通信的概念
进程的资源空间是相互独立的,一般而言是不能相互访问的。但很多情况下进程间需要互相通信,来完成系统的某项功能。进程通过与内核及其它进程之间的互相通信来协调它们的行为。
通信方法:
数据传输:一个进程将它的数据发送给另一个进程【如socket一般,把需要通信的数据传输给对方】
管道:使用一片独立的区域【不在双方的资源空间中】,像一个有两个口的仓库一样,厂家负责在东门把产品放到仓库,司机负责在西门拉走产品
资源共享:约定一片区域,双方都可以随意取放
消息队列:这也是一个独立的区域,足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息
Queue:
可以使用队列multiprocessing.Queue来进行进程通信
Queue 在multiprocessing 模块中:from multiprocessing import Queue
Queue的使用:
1.创建对象:Queue对象=Queue()
2.传入对象:要在主进程外使用Queue对象,需要作为参数传入
3.操作对象:【获取元素:Queue对象.get()】、【放入元素:Queue对象.put(元素)】
#Queue在multiprocessing中
from multiprocessing import Queue,Process
def f(q):#要在主进程外使用,需要作为参数传入
q.put(['helloworld'])
def m(q):
print("get in p2:",q.get())
if __name__=="__main__":
q=Queue()
p=Process(target=f,args=(q,))
p.start()
p2=Process(target=m,args=(q,))
p2.start()
Pipe:
可以使用管道Pipe来进行进程通信
Pipe 在multiprocessing 模块中:from multiprocessing import Pipe
Pipe的使用:
1.创建对象:第一个Pipe对象,第二个Pipe对象=Pipe(),返回两个对象,第一个对象只能发,第二个对象只能收
2.传入对象:在要发送的进程,传入第一个Pipe对象;在要接收的进程,传入第二个Pipe对象
3.操作对象:【获取元素:第一个对象.recv()】、【放入元素:第二个对象.send(元素)】
4.操作完成后关闭管道:第一个对象.close(),第一个对象.close()
from multiprocessing import Pipe,Processdef f(conn): a=[1,2,3,4] conn.send(a) conn.close()def m(conn): a=conn.recv() conn.close()if __name__=="__main__": parent_conn,child_conn=Pipe()#返回两个值,第一个只能发,第二个只能收 p1=Process(target=f,args=(child_conn,)) p2 = Process(target=m, args=(parent_conn,))# p1.start() p2.start() p1.join() p2.join()
希望本文所述对大家Python程序设计有所帮助。
来源:https://www.cnblogs.com/progor/p/8439320.html
猜你喜欢
- 我们在浏览网页的时候偶尔会遇到一些陌生的网页交互行为,通常情况下它们并不会影响你的正常使用,之所以出现情况往往是因为,设计师在设计某个交互方
- 简介MySQL通过复制(Replication)实现存储系统的高可用。目前,MySQL支持的复制方式有:异步复制(Asynchronous
- 我就废话不多说了,大家还是直接看代码吧!from tensorflow.python.keras.models import Sequent
- Lightbox里面的一个函数,能把页面实际的高宽与浏览器可视面积的高宽保存在一个数组中..非常好用.什么是Lightbox?下载light
- 实现效果实现代码import matplotlib.pyplot as pltfrom skimage import iofile_name
- 有一个需求是要在一个云监控的状态值中存储多个状态(包括可同时存在的各种异常、警告状态)使用了位运算机制在一个int型中存储。现在监控日志数据
- 多条ROC曲线绘制函数def multi_models_roc(names, sampling_methods, colors, X_tes
- 二值图像的凸壳指的是包围输入二值图像白色区域的最小的凸多边形的像素集合。skimage中的函数from skimage.morphology
- 网页可以说是网站构成的基本元素。当我们轻点鼠标,在网海中遨游,一幅幅精彩的网页会呈现在我们面前,那么,网页的精彩与否的因素是什么呢?色彩的搭
- 前言在 JavaWeb 开发中,一般使用 Zxing 来生成和识别二维码,但是,Zxing 的识别有点差强人意,不少相对模糊的二维码识别率很
- 本文转自:https://blog.csdn.net/qq_42730750/article/details/108415551前言 各大
- 背景图像滤波的作用简单来说就是将一副图像通过滤波器得到另一幅图像;明确一个概念,滤波器又被称为卷积核,滤波的过程又被称为卷积;实际上深度学习
- 内容摘要:在网页制作中,有许多的术语,例如:CSS、HTML、DHTML、XHTML等等。在下面的文章中我们将会用到一些有关于HTML的基本
- 在前端开发中,拖拽排序是一种提升用户体验非常好的方式,常见的场景有单列表拖拽排序,多列表拖拽交换排序,比如以下这种效果: 下面将以
- 今天写了一段CSS,写时突然想到的,写出来和大家分享一下; 我们可能早已习惯了padding在不同浏览器中的不同之处,
- <!--#include file="config.asp" -->&nbs
- 如何获取一个页面内所有URL链接?在Python中可以使用urllib对网页进行爬取,然后利用Beautiful Soup对爬取的页面进行解
- python3获取控制台输入的数据的方法:可以利用input()函数来获取。python3为我们提供了input()函数,该函数用来接收一个
- xml.etree.ElementTree可以通过支持的有限的XPath表达式来定位元素。语法ElementTree支持的语法如下:语法说明
- 浏览器经常Cache你的页面,这是一个很麻烦的问题,下面先提出几种方案来解决一般的问题:(把下面的代码加入到asp程序的最开始位置)<