[b0037] python 归纳 (二二)_多进程数据共享和同步_管道Pipe
# -*- coding: utf-8 -*-
"""
多进程数据共享 管道Pipe 逻辑:
2个进程,各自发送数据到管道,对方从管道中取到数据 总结:
1、只适合两个进程
2、recv 会阻塞
3、其中一个进程结束了,管道还在,另外一个进程还能使用
4、可以把管道认为一个队列, 发送数据端,往队列写数据
接收数据端,从队列读数据,队列空了阻塞
单向管道 1个队列,双向管道 2个队列 使用:
1. 创建2个管道的两端的对象 pipe_left_conn,pipe_right_conn = Pipe()
2. 在两个进程中 分布 调用 收发命令 conn.send(messsage) con.recv() 参考:
Pipe对象返回的元组分别代表管道的两端,管道默认是全双工,两端都支持send和recv方法,
两个进程分别操作管道两端时不会有冲突,两个进程对管道一端同时读写时可能会有冲突:
""" from multiprocessing import Process,Pipe # 子进程函数
def f(conn):
conn.send("child send1")
conn.send([2,'test',None])
print(conn.recv())
conn.close() if __name__ == "__main__":
# 产生两个返回对象,一个是管道这一头,一个是另一头 # 创建管道,拿到两端对象
# 默认True,双向管道都能收发
# Pipe(False)单向管道 左边只接收,右边只发送
pipe_left_conn,pipe_right_conn = Pipe() p = Process(target=f,args=(pipe_right_conn,))
p.start() print(pipe_left_conn.recv()) pipe_left_conn.send('\nfather send') p.join() # 注意,子进程已经结束了,但是管理里的数据还在
print(pipe_left_conn.recv()) # print(parent_conn.recv()) # 此时管道空了,会阻塞 pipe_left_conn.close()
pipe_right_conn.close() """
Out: child send1 father send
[2, 'test', None]
"""
[b0037] python 归纳 (二二)_多进程数据共享和同步_管道Pipe的更多相关文章
- [b0036] python 归纳 (二一)_多进程数据共享和同步_服务进程Manager
# -*- coding: utf-8 -*- """ 多进程数据共享 服务器进程 multiprocessing.Manager 入门使用 逻辑: 20个子线程修改共享 ...
- [b0035] python 归纳 (二十)_多进程数据共享和同步_共享内存Value & Array
1. Code # -*- coding: utf-8 -*- """ 多进程 数据共享 共享变量 Value,Array 逻辑: 2个进程,对同一份数据,一个做加法,一 ...
- [b0041] python 归纳 (二六)_多进程数据共享和同步_事件Event
# -*- coding: utf-8 -*- """ 多进程 同步 事件multiprocessing.Event 逻辑: 子线程负责打印,会阻塞, 等待主进程发出控制 ...
- [b0040] python 归纳 (二五)_多进程数据共享和同步_信号量Semaphore
# -*- coding: utf-8 -*- """ 多进程同步 使用信号量 multiprocessing.Semaphore 逻辑: 启动5个进程,打印,每个各自睡 ...
- [b0039] python 归纳 (二四)_多进程数据共享和同步_锁Lock&RLock
# -*- coding: utf-8 -*- """ 多进程 锁使用 逻辑: 10个进程各种睡眠2秒,然后打印. 不加锁同时打印出来,总共2秒,加锁一个接一个打印,总共 ...
- [b0038] python 归纳 (二三)_多进程数据共享和同步_队列Queue
1 队列读写 # -*- coding: utf-8 -*- """ 多进程 共享 队列 multiprocessing.Process 逻辑: 一个进程往队列写数据, ...
- [b0027] python 归纳 (十二)_并发队列Queue的使用
# -*- coding: UTF-8 -*- """ 学习队列 Queue 总结: 1. 队列可以设置大小,也可以无限大小 2. 空了,满了,读写时可以阻塞,也可以报错 ...
- Py修行路 python基础 (二十五)线程与进程
操作系统是用户和硬件沟通的桥梁 操作系统,位于底层硬件与应用软件之间的一层 工作方式:向下管理硬件,向上提供接口 操作系统进行切换操作: 把CPU的使用权切换给不同的进程. 1.出现IO操作 2.固定 ...
- Python爬虫利器二之Beautiful Soup的用法
上一节我们介绍了正则表达式,它的内容其实还是蛮多的,如果一个正则匹配稍有差池,那可能程序就处在永久的循环之中,而且有的小伙伴们也对写正则表达式的写法用得不熟练,没关系,我们还有一个更强大的工具,叫Be ...
随机推荐
- 百度地图API----搜索地址,获取该点的位置坐标并转换成WebMercator
function doFind(){ LoadBaiduMapScript().then(BaiduMap).then(function () { //查询并获取坐标 var myGeo = new ...
- HTML5播放视频,并使用ffmpeg对视频转编码
网页加入视频可以用h5自带的video标签,这里用一个jQuery封装优化好的video视频组件videojs. videojs官方网站:https://docs.videojs.com/index. ...
- JavaWeb开发——软件国际化(文本元素国际化)
前几天围绕着JDBC编程进行了系统的学习.现在我们对Java程序数据库操作已经是轻车熟路了.也学会了使用各种框架来帮助我们简化编程. 今天是学习计划的第七天,虽然学习热情没有前几天高涨了.但是,写博客 ...
- vue的类element的input类型组件封装
前提:题主之前只是随意的封装,项目统一ui,然后只实现了父组件拿子组件值,没有实现父组件修改子组件的值,仔细看了文档才知道用model的作用,直接上代码 Vue.component("bas ...
- DataPump遭遇ORA-06512&ORA-39080&ORA-01403错误案例
最近使用数据泵(DataPump)比较多,遇到了奇奇怪怪的问题,似乎Apply了补丁PSU 10.2.0.5.180717后,DataPump的问题就格外多.如下所示: expdp system/xx ...
- Error 942 occured during Initialization of Bufq KUPC$S_1_20181023155636
一台ORACLE实例(Oracle Database 10g Release 10.2.0.5.0)启动时,报"Error 942 occured during Initializati ...
- mysql5.7 Multiple-Column Indexes 多列索引(二)
场景一: 复合索引的替代方法,对多列字段拼接做hash,引入一个hashed 字段,对此字段添加索引,可以做到复合索引查询速度快,例: SELECT * FROM tbl_name WHERE has ...
- 【Https异常】This request has been blocked; the content must be served over HTTPS
一.问题出现场景 项目从http升级到https后,jsp页面存在发送http请求的情况下就会出现该异常.因为HTTPS 是 HTTP over Secure Socket Layer,以安全为目标的 ...
- PM8909 linear charger硬件概述
电池充电是由qpnp-vm-bus.c(电池驱动BMS)和qpnp-linear-charger.c(线性充电器)组成: SMMB charger:Switch-ModeBattery Charger ...
- 7. java 数组概念
一.数组概念 数组:是一种容器,可以同时存放多个数据值: 特点:数组是一种引用类型:数组中多个数据,类型必须统一:数组的长度在程序运行期间不可改变: 二.数组初始化 1. 动态初始化(指定长度 ...