[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 ...
随机推荐
- vue发送ajax请求
一.vue-resource 1.简介 一款vue插件,用于处理ajax请求,vue1.x时广泛应用,现不被维护. 2.使用流程 step1:安装 [命令行输入] npm install vue-re ...
- Python Web(四)
Infi-chu: http://www.cnblogs.com/Infi-chu/ 一.Django-forms作用 前端和后端都要校验 前端校验的目的:减少后端的压力 用forms可以同时完成前端 ...
- [日常] 解决mysql localhost可以连接但是127.0.0.1不能连接
在测试mysql的过程中遇到使用localhost可以连接但是127.0.0.1不能连接,原因是localhost使用的本地socket连接,127.0.0.1使用使用的tcp连接 在mysql库的u ...
- Python Django,事务,transaction.atomic,事务保存点
from django.shortcuts import renderfrom django.http import HttpResponsefrom django.views.generic imp ...
- 重装windows后如何恢复mysql服务
如果重装系统后之前的mysql还在的话,可又直接恢复,不需要安装: 注意my.ini文件的位置,应该与bin目录同级: 进入cmd,然后进入你的mysql的bin目录,输入命令:mysqld inst ...
- a迭代中的燃尽图统计
简单分析:项目一直在跟进,进展较缓,临近迭代结束,项目进度突飞猛进.
- 元数据MetaData(五)
JDBC的元数据接口有: DatabaseMetaData数据库级 ResultSetMetaData结果集级 一.DatabaseMetaData 在对数据源进行连接以后,得到一个Connectio ...
- python 编程2
一.课堂练习 描述 使用input输入若干个数,输出个数以及其中最大的数 1.普通方法实现 def max(*a): m=a[0] b=0 for x in a: if x>m: m=x b+= ...
- 设计模式-Facade(结构型模式) 针对 最终类的实现通过一系列类的相关操作,重点关注 起始与结尾的操作。
以下代码来源: 设计模式精解-GoF 23种设计模式解析附C++实现源码 //Facade.h #pragma once class Subsystem1 { public: Subsystem1() ...
- 使用adb安装apk到手机
[ADB]Android debug bridge.Android手机实际是基于Linux系统的.通过USB线将android手机与电脑连起来,在电脑上dos命令行中敲adb shell命令,可以登录 ...