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列表计数及插入实例
Dec 17 Python
浅谈MySQL中的触发器
May 05 Python
python调用fortran模块
Apr 08 Python
Python sqlite3事务处理方法实例分析
Jun 19 Python
Python计算开方、立方、圆周率,精确到小数点后任意位的方法
Jul 17 Python
python将秒数转化为时间格式的实例
Sep 16 Python
Django框架自定义模型管理器与元选项用法分析
Jul 22 Python
python多线程同步之文件读写控制
Feb 25 Python
分享一个pycharm专业版安装的永久使用方法
Sep 24 Python
Python解释器及PyCharm工具安装过程
Feb 26 Python
windows、linux下打包Python3程序详细方法
Mar 17 Python
自定义Django_rest_framework_jwt登陆错误返回的解决
Oct 18 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
2020最新CPU的性能排名
2020/04/02 数码科技
介绍几个array库的新函数 php
2006/12/29 PHP
PHP number_format() 函数定义和用法
2012/06/01 PHP
php中foreach结合curl实现多线程的方法分析
2016/09/22 PHP
jquery的$(document).ready()和onload的加载顺序
2010/05/26 Javascript
一款Jquery 分页插件的改造方法(服务器端分页)
2011/07/11 Javascript
ff chrome和ie下全局动态定位的异同及全局高度的取法
2014/06/30 Javascript
JS遍历Json字符串中键值对先转成JSON对象再遍历
2014/08/15 Javascript
javascript实现右侧弹出“分享到”窗口效果
2016/02/01 Javascript
jQuery实现table中的tr上下移动并保持序号不变的实例代码
2016/07/11 Javascript
卸载安装Node.js与npm过程详解
2016/08/15 Javascript
JS实现购物车特效
2017/02/02 Javascript
JS实现移动端整屏滑动的实例代码
2017/11/10 Javascript
vue+element-ui动态生成多级表头的方法
2018/08/28 Javascript
vue常用高阶函数及综合实例
2021/02/25 Vue.js
解决windows下Sublime Text 2 运行 PyQt 不显示的方法分享
2014/06/18 Python
Python函数式编程指南(一):函数式编程概述
2015/06/24 Python
Python AES加密模块用法分析
2017/05/22 Python
python的dataframe和matrix的互换方法
2018/04/11 Python
使用Numpy读取CSV文件,并进行行列删除的操作方法
2018/07/04 Python
python实现汉诺塔算法
2021/03/01 Python
python之yield和Generator深入解析
2019/09/18 Python
如何在python中判断变量的类型
2020/07/29 Python
css3 图片圆形显示 如何CSS将正方形图片显示为圆形图片布局
2014/10/10 HTML / CSS
html5新增的属性和废除的属性简要概述
2013/02/20 HTML / CSS
详解HTML5中ol标签的用法
2015/09/08 HTML / CSS
HTML5实现简单图片上传所遇到的问题及解决办法
2016/01/20 HTML / CSS
夏威夷航空官网:Hawaiian Airlines
2016/09/11 全球购物
SISLEY希思黎官方旗舰店:享誉全球的奢华植物美容品牌
2018/04/25 全球购物
师范毕业生求职自荐信
2013/09/25 职场文书
小学生美德少年事迹
2014/02/02 职场文书
高三毕业典礼主持词
2014/03/27 职场文书
pytorch 使用半精度模型部署的操作
2021/05/24 Python
CSS3中Animation实现简单的手指点击动画的示例
2021/07/15 HTML / CSS
全面盘点MySQL中的那些重要日志文件
2021/11/27 MySQL
2022年显卡天梯图(6月更新)
2022/06/17 数码科技