管道(pipe),进程之间的共享内存(Manager,Value)
1 管道(了解) from multiprocessing import Pipe con1,con2 = Pipe() 管道是不安全的。 管道是用于多进程之间通信的一种方式。 如果在单进程中使用管道,那么就是con1收数据,就是con2发数据。 如果是con1发数据,就是con2收数据 如果在多进程中使用管道,那么就必须是父进程使用con1收,子进程就必须使用con2发 父进程使用con1发,子进程就必须使用con2收 父进程使用con2收,子进程就必须使用con1发 父进程使用con2发,子进程就必须使用con1收 在管道中有一个著名的错误叫做EOFError。是指,父进程中如果关闭了发送端,子进程还继续接收数据,那么就会引发EOFError。单管道代码:
from multiprocessing import Pipe con1,con2 = Pipe() con1.send('abc')print(con2.recv())con2.send(123)print(con1.recv()) 多管道代码:
from multiprocessing import Pipe,Process def func(con): con1,con2 = con con1.close()# 子进程使用con2和父进程通信,所以 while 1: try: print(con2.recv())#当主进程的con1发数据时,子进程要死循环的去接收。 except EOFError:# 如果主进程的con1发完数据并关闭con1,子进程的con2继续接收时,就会报错,使用try的方式,获取错误 con2.close()# 获取到错误,就是指子进程已经把管道中所有数据都接收完了,所以用这种方式去关闭管道 break if __name__ == '__main__': con1,con2 = Pipe() p = Process(target=func,args=((con1,con2),)) p.start() con2.close()# 在父进程中,使用con1去和子进程通信,所以不需要con2,就提前关闭 for i in range(10):# 生产数据 con1.send(i)# 给子进程的con2发送数据 con1.close()# 生产完数据,关闭父进程这一端的管道
2 进程之间的共享内存 from multiprocessing import Manager,Value m = Manager() num = m.dict({键 : 值}) num = m.list([1,2,3])代码:
from multiprocessing import Process,Manager def func(num): num[0] -= 1 print('子进程中的num的值是',num) if __name__ == '__main__': m = Manager() num = m.list([1,2,3]) p = Process(target=func,args=(num,)) p.start() p.join() print('父进程中的num的值是',num)
管道(pipe),进程之间的共享内存(Manager,Value)的更多相关文章
- Linux 基于IPC机制实现进程间的共享内存处理
今天学习了相关于IPC(InterProcess Communication ,进程间通信)的相关知识.就做个笔记,一来让大家检查一下我的理解方面是不是有错误,二来也为了能让更多的博友们了解到相关的知 ...
- 【网络编程基础】Linux下进程通信方式(共享内存,管道,消息队列,Socket)
在网络课程中,有讲到Socket编程,对于tcp讲解的环节,为了加深理解,自己写了Linux下进程Socket通信,在学习的过程中,又接触到了其它的几种方式.记录一下. 管道通信(匿名,有名) 管道通 ...
- PHP进程通信基础——信号量+共享内存通信
PHP进程通信基础--信号量+共享内存通信 由于进程之间谁先执行并不确定,这取决于内核的进程调度算法,其中比较复杂.由此有可能多进程在相同的时间内同时访问共享内存,从而造成不可预料的错误.信号量这个名 ...
- Linux进程通信之共享内存实现生产者/消费者模式
共享内存 共享内存是内核为进程创建的一个特殊内存段,它将出现在进程自己的地址空间中,其它进程可以将同一段共享内存连接(attach)到自己的地址空间.这是最快的进程间通信方式,但是不提供任何同步功能( ...
- linux 进程通信之 共享内存
共享内存是被多个进程共享的一部分物理内存.共享内存是进程间共享数据的一种最快的方法.一个进程向共享内存区域写入了数据,共享这个内存区域的全部进程就能够立马看到当中的内容. 关于共享内存使用的API k ...
- Linux 进程通信(共享内存区)
共享内存是由内核出于在多个进程间交换信息的目的而留出的一块内存区(段). 如果段的权限设置恰当,每个要访问该段内存的进程都可以把它映像到自己的私有地址空间中. 如果一个进程更新了段中的数据,其他进程也 ...
- win32进程间通讯--共享内存
小白一枚,如有不对,请各位大神多多指教! 最近看了看win32进程间通讯.简单写了写利用共享内存实现进程间通讯 使用共享内存实现进程间通讯: 1.在WM_CREATE消息下创建文件映射内核对象 hMa ...
- 8.7 进程间的通讯:管道、消息队列、共享内存、信号量、信号、Socket
进程间的通讯 进程间为什么需要通讯? 共享数据.数据传输.消息通知.进程控制 进程间的通讯有哪些类型? 首先,联系前面讲过的知识,进程之间的用户地址空间是相互独立的,不能进行互相访问,但是,内核空间却 ...
- Linux进程间通信:管道,信号量,消息队列,信号,共享内存,套接字
Linux下的进程通信手段基本上是从UNIX平台上的进程通信手段继承而来的.而对UNIX发展做出重大贡献的两大主力AT&T的贝尔实验室及BSD(加州大学伯克利分校的伯克利软件发布中心)在进程间 ...
随机推荐
- I.MX6 OTG set as slave device hacking
/****************************************************************************** * IMX6 OTG set as sl ...
- Linux操作系统网络配置
- hdu1238 Substrings 扩展KMP
You are given a number of case-sensitive strings of alphabetic characters, find the largest string X ...
- $data[$i++]+=2;不等于$data[$i++]=$data[$i++]+2;
$data=array(1,2,3,4); $i=1; $data[$i++]+=2; var_dump($data); echo $i; //输出:array(1,4,3,4) 和 2 $data= ...
- 自制hashmap
package jjj; public class MyHashMap<K, V> { //initialization capacity private int capacity = 1 ...
- android BSP移植综述
将android移植到特定硬件平台上,其核心是bsp的搭建工作,bsp是板级支持包,并不是特定某个文件,而是从功能上理解的一种硬件适配软件包,它的核心就是: 1. linux内核硬件相关部分(主要是l ...
- day43 数据库知识欠缺的
一 什么是存储引擎 mysql中建立的库===>文件夹 库中建立的表===>文件 现实生活中我们用来存储数据的文件有不同的类型,每种文件类型对应各自不同的处理机制:比如处理文本用txt类型 ...
- C语言面试题4
第二部分:程序代码评价或者找错 1.下面的代码输出是什么,为什么?void foo(void){ unsigned int a = 6; int b = -20; (a+b > ...
- BitKeeper 和 Git
在 2002 年到 2005年, Linux 内核使用 BitKeeper 管理代码. BitKeeper 的 CEO 和 Linus 曾经是好友. 在 Git 诞生 11年后 BitKeeper 宣 ...
- dell support
部門營業時間 電話號碼訂單支援中小型企業 (員工不多於 500名 )00852-3416-0910 9:00 - 18:00 訂單編號: 810607806 訂單日期: 26/11/2014 客戶 ...