Python通过4种方式实现进程数据通信


Posted in Python onMarch 12, 2020

python提供了4种方式来满足进程间的数据通信

1. 使用multiprocessing.Queue可以在进程间通信,但不能在Pool池创建的进程间进行通信

2. 使用multiprocessing.Manager.Queue可以在Pool进程池创建的进程间进行通信

3. 通过Pipe进行线程间的通信, pipe进程间通信的性能高于Queue,但是它只能在两个进程间进行通信

4. 使用Manager类提供的数据结构可以进行进程间的通信

from multiprocessing import Process, Queue, Pool, Manager, Pipe
# 注意线程间的通信,使用的queue.Queue
# from queue import Queue
import time


# 1. 使用multiprocessing.Queue可以在进程间通信

# def producer(queue):
#   queue.put('A')
#   time.sleep(2)
#
# def consumer(queue):
#   time.sleep(2)
#   data = queue.get()
#   print(data)
#
# if __name__ == '__main__':
#   queue= Queue(10)
#   p = Process(target=producer, args=(queue,))
#   c = Process(target=consumer, args=(queue,))
#   p.start()
#   c.start()
#   p.join()
#   c.join()


# 2. 使用共享全局变量,在多进程间通信(结论: 不行)
# def producer(a):
#   a += 1
#   time.sleep(2)
#
#
# def consumer(a):
#   time.sleep(2)
#   print(a)
#
# if __name__ == '__main__':
#   a = 1
#   p = Process(target=producer, args=(a,))
#   c = Process(target=consumer, args=(a,))
#   p.start()
#   c.start()
#   p.join()
#   c.join()


# 3. multiprocessing.Queue不能用于multiprocessing.Pool进程池创建的进程间进行通信
# def producer(queue):
#   queue.put('A')
#   time.sleep(2)
#
#
# def consumer(queue):
#   time.sleep(2)
#   data = queue.get()
#   print("consumer:%s" % data)
#
#
# if __name__ == '__main__':
#   # queue = Queue(10) # 这个是使用multiprocessing.Queue,无效
#   queue = Manager().Queue(10) # 这个是使用multiprocessing.Manager.Queue, 可以
#   pool = Pool(2)
#   pool.apply_async(producer, args=(queue,))
#   pool.apply_async(consumer, args=(queue,))
#   pool.close()
#   pool.join()


# 4.通过Pipe进行线程间的通信, pipe进程间通信的性能高于Queue
# def producer(pipe):
#   pipe.send('admin')
#
#
# def consumer(pipe):
#   data = pipe.recv()
#   print("consumer:%s" % data)
#
#
# if __name__ == '__main__':
#   receive_pipe, send_pipe = Pipe()
#   """Pipe只能适应于两个进程间的通信"""
#   p = Process(target=producer, args=(send_pipe,))
#   c = Process(target=consumer, args=(receive_pipe,))
#   p.start()
#   c.start()
#   p.join()
#   c.join()


# 5. 进程间通信的其它方式

def add_data(p_dict, key, value):
  p_dict[key] = value

if __name__ == '__main__':
  progress_dict = Manager().dict() #Manager()类中提供的数据结构都能够做到进程的通信
  first_progress = Process(target=add_data, args=(progress_dict, 'name', 'admin',))
  second_progress = Process(target=add_data, args=(progress_dict, 'age', 45,))
  first_progress.start()
  second_progress.start()
  first_progress.join()
  second_progress.join()
  print(progress_dict) #{'age': 45, 'name': 'admin'}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
详解python之配置日志的几种方式
May 22 Python
Django数据库操作的实例(增删改查)
Sep 04 Python
读取json格式为DataFrame(可转为.csv)的实例讲解
Jun 05 Python
PyCharm设置SSH远程调试的方法
Jul 17 Python
python交易记录整合交易类详解
Jul 03 Python
python删除指定列或多列单个或多个内容实例
Jun 28 Python
Python设计密码强度校验程序
Jul 30 Python
python时间序列数据转为timestamp格式的方法
Aug 03 Python
Python3.9新特性详解
Oct 10 Python
Python中logging日志的四个等级和使用
Nov 17 Python
使用Python提取文本中含有特定字符串的方法示例
Dec 09 Python
Python中三种花式打印的示例详解
Mar 19 Python
Python多进程编程multiprocessing代码实例
Mar 12 #Python
Python多线程多进程实例对比解析
Mar 12 #Python
Python线程协作threading.Condition实现过程解析
Mar 12 #Python
Python 实现网课实时监控自动签到、打卡功能
Mar 12 #Python
Python基于read(size)方法读取超大文件
Mar 12 #Python
Python函数生成器原理及使用详解
Mar 12 #Python
python deque模块简单使用代码实例
Mar 12 #Python
You might like
jquery获取下拉列表的值为null的解决方法
2011/03/18 Javascript
JS JSON对象转为字符串的简单实现方法
2013/11/18 Javascript
从零学JSON之JSON数据结构
2014/05/19 Javascript
ff chrome和ie下全局动态定位的异同及全局高度的取法
2014/06/30 Javascript
详解JavaScript基于面向对象之创建对象(2)
2015/12/10 Javascript
javascript实现拖放效果
2015/12/16 Javascript
JavaScript知识点总结(十一)之js中的Object类详解
2016/05/31 Javascript
详解nodeJS之二进制buffer对象
2017/06/03 NodeJs
详解webpack 如何集成第三方js库
2017/06/29 Javascript
vue.js  父向子组件传参的实例代码
2017/10/29 Javascript
解决JS表单验证只有第一个IF起作用的问题
2018/12/04 Javascript
Javascript var变量删除原理及实现
2020/08/26 Javascript
vue 如何从单页应用改造成多页应用
2020/10/23 Javascript
Python脚本实现自动发带图的微博
2016/04/27 Python
Python正则表达式匹配中文用法示例
2017/01/17 Python
django开发之settings.py中变量的全局引用详解
2017/03/29 Python
Python 十六进制整数与ASCii编码字符串相互转换方法
2018/07/09 Python
利用Python如何批量更新服务器文件
2018/07/29 Python
python3 面向对象__类的内置属性与方法的实例代码
2018/11/09 Python
Python 使用PyQt5 完成选择文件或目录的对话框方法
2019/06/27 Python
利用python绘制中国地图(含省界、河流等)
2020/09/21 Python
python中pop()函数的语法与实例
2020/12/01 Python
彻底解决pip下载pytorch慢的问题方法
2021/03/01 Python
css3动画过渡实现鼠标跟随导航效果
2018/02/08 HTML / CSS
详解HTML5通讯录获取指定多个人的信息
2016/12/20 HTML / CSS
Web时代变迁及html5与html4的区别
2016/01/06 HTML / CSS
最畅销的视频游戏享受高达90%的折扣:CDKeys
2020/02/10 全球购物
水务局局长岗位职责
2013/11/28 职场文书
校园文化标语
2014/06/18 职场文书
老龄工作先进事迹
2014/08/15 职场文书
小学关爱留守儿童活动方案
2014/08/25 职场文书
社区党员公开承诺书
2014/08/30 职场文书
六年级小学生评语
2014/12/26 职场文书
银行优秀员工推荐信
2015/03/24 职场文书
2016年清明节寄语
2015/12/04 职场文书
Win11无法安装更新补丁KB3045316怎么办 附KB3045316补丁修复教程
2022/08/14 数码科技