43_并发编程-管道
1 from multiprocessing import Process, Pipe 2 3 def f(conn): 4 conn.send("Hello The_Third_Wave") 5 conn.close() 6 7 if __name__ == '__main__': 8 parent_conn, child_conn = Pipe() 9 p = Process(target=f, args=(child_conn,)) 10 p.start() 11 print(parent_conn.recv()) 12 p.join()
应该特别注意管道端点的正确管理问题。如果是生产者或消费者中都没有使用管道的某个端点,就应将它关闭。这也说明了为何在生产者中关闭了管道的输出端,在消费者中关闭管道的输入端。如果忘记执行这些步骤,程序可能在消费者中的recv()操作上挂起(就是阻塞)。管道是由操作系统进行引用计数的,必须在所有进程中关闭管道的相同一端就会能生成EOFError异常。因此,在生产者中关闭管道不会有任何效果,除非消费者也关闭了相同的管道端点。
1 # 管道错误模拟 2 def func1(conn1,conn2): 3 try: 4 msg = conn2.recv() 5 print('>>>',msg) 6 7 #如果管道一端关闭了,那么另外一端在接收消息的时候会报错 8 msg2 = conn2.recv() #EOFError 9 10 except EOFError: 11 print('对方管道一端已经关闭') 12 conn2.close() 13 14 if __name__ == '__main__': 15 conn1, conn2 = Pipe() 16 p = Process(target=func1,args=(conn1,conn2,)) 17 p.start() 18 conn1.send('小鬼!') 19 conn1.close() 20 # conn1.recv() #OSError: handle is closed 如果管道已经关闭,再接收子进程消息报错
转载于:https://www.cnblogs.com/hq82/p/9851633.html
43_并发编程-管道相关推荐
- 05 Python 并发编程(管道,事件,信号量,进程池)
管道 Conn1,conn2 = Pipe() Conn1.recv() Conn1.send() 数据接收一次就没有了 from multiprocessing import Process,Pip ...
- 并发编程线程通信之管道流
前言 在并发编程中,需要处理两个问题:线程之间如何通信及线程之间如何同步.通知是指线程之间以何种机制来交换信息.在命令式编程中,线程之间的通信机制有两种:共享内存和消息传递. 在共享内存的并发模型里, ...
- 【并发编程三】C++进程通信——管道(pipe)
[并发编程三]C++实现通信--管道(pipe) 一.管道(pipe) 二.匿名管道 1.简介 2.父子进程:匿名管道的通信过程? 3.相关函数 3.1.创建管道CreatePipe 3.2.写入管道 ...
- Python并发编程实例教程
有关Python中的并发编程实例,主要是对Threading模块的应用,文中自定义了一个Threading类库. 一.简介 我们将一个正在运行的程序称为进程.每个进程都有它自己的系统状态,包含内存状态 ...
- golang并发编程goroutine+channel(一)
go语言的设计初衷除了在不影响程序性能的情况下减少复杂度,另一个目的是在当今互联网大量运算下,如何让程序的并发性能和代码可读性达到极致.go语言的并发关键词 "go" go dos ...
- java内存栅栏_内存屏障(Memory Barriers/Fences) - 并发编程中最基础的一项技术
我们经常都听到并发编程,但很多人都被其高大上的感觉迷惑而停留在知道听说这一层面,下面我们就来讨论并发编程中最基础的一项技术:内存屏障或内存栅栏,也就是让一个CPU处理单元中的内存状态对其它处理单元可见 ...
- 并发编程之多进程篇之四
主要知识点:互斥锁.队列和生产者消费者模型 一.互斥锁 1.进程之间数据不共享,但是共享同一套文件系统,所以访问同一个文件,或同一个打印终端,是没有问题的, 而共享带来的是竞争,竞争带来的结果就是错乱 ...
- Python之路(第三十八篇) 并发编程:进程同步锁/互斥锁、信号量、事件、队列、生产者消费者模型...
一.进程锁(同步锁/互斥锁) 进程之间数据不共享,但是共享同一套文件系统,所以访问同一个文件,或同一个打印终端,是没有问题的, 而共享带来的是竞争,竞争带来的结果就是错乱,如何控制,就是加锁处理. 例 ...
- Java 面试知识点解析(二)——高并发编程篇
前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大 ...
- Python并发编程之多进程(二)
十.进程同步 进程之间数据不共享,但是共享同一套文件系统,所以访问同一个文件,或同一个打印终端,是没有问题的, 而共享带来的是竞争,竞争带来的结果就是错乱,如何控制,就是加锁处理 ---------- ...
最新文章
- Eclipse中10个最有用的快捷键组合
- 并发--基本的线程机制
- 点开计算机桌面选项怎么不见了,电脑桌面上的图标都不见了该怎么办?
- android 之DatePicker以及TimePicker的用法
- Python基础知识之文件的读取操作
- mysql命令行查看表的触发器_Mysql事项,视图,函数,触发器命令(详解)
- 加速转型 高通绝地反攻
- leetCode:reverseInteger 反向整数 【JAVA实现】
- C语言课程设计学生考勤管理系统
- 【转】NB-IoT移远BC95使用小结
- python 英语分词_python 英文分词
- 【福利贴】教你如何移动联通电信免流
- 东北大学计算机硬件题库,东北大学20春学期《计算机硬件技术基础》在线平时作业123答案100...
- Linux桌面i3与i7,i3吊打i7?——你所不知的CPU型号后缀的秘密
- 【云原生】Hadoop HA on k8s 环境部署
- Lidar_imu自动标定源码阅读(二)——calibration部分
- 介绍自己过去现在和未来_过去,现在和未来
- 职业选手的。cfg怎么用_靠演技出道,用直拍疯狂吸粉:“姐圈”选手怎么就出圈了呢?...
- 百度API加载离线百度电子地图和卫星切片
- 强化学习系列(1) 基本概念