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标准日志模块logging的使用方法
Nov 01 Python
横向对比分析Python解析XML的四种方式
Mar 30 Python
Python利用Beautiful Soup模块搜索内容详解
Mar 29 Python
python机器学习之神经网络(一)
Dec 20 Python
python中文编码与json中文输出问题详解
Aug 24 Python
Tensorflow实现神经网络拟合线性回归
Jul 19 Python
python 利用jinja2模板生成html代码实例
Oct 10 Python
python将邻接矩阵输出成图的实现
Nov 21 Python
基于python plotly交互式图表大全
Dec 07 Python
python实现最速下降法
Mar 24 Python
Python实现文件压缩和解压的示例代码
Aug 12 Python
Python爬虫网络请求之代理服务器和动态Cookies
Apr 12 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
echo, print, printf 和 sprintf 区别
2006/12/06 PHP
用php获取远程图片并把它保存到本地的代码
2008/04/07 PHP
PHP 柱状图实现代码
2009/12/04 PHP
Laravel关联模型中过滤结果为空的结果集(has和with区别)
2018/10/18 PHP
js汉字排序问题 支持中英文混排,兼容各浏览器,包括CHROME
2011/12/20 Javascript
js获得页面的高度和宽度的方法
2014/02/23 Javascript
Javascript基础教程之定义和调用函数
2015/01/18 Javascript
浅谈JavaScript的事件
2015/02/27 Javascript
javascript元素动态创建实现方法
2015/05/13 Javascript
限制文本框只能输入数字||只能是数字和小数点||只能是整数和浮点数
2016/05/27 Javascript
js 点击a标签 获取a的自定义属性方法
2016/11/21 Javascript
手机软键盘弹出时影响布局的解决方法
2016/12/15 Javascript
移动端基础事件总结与应用
2017/01/12 Javascript
JavaScript数据结构之双向链表定义与使用方法示例
2017/10/27 Javascript
vue中进入详情页记住滚动位置的方法(keep-alive)
2018/09/21 Javascript
ES6入门教程之Array.from()方法
2019/03/23 Javascript
使用webpack搭建vue环境的教程详解
2019/12/31 Javascript
JavaScript实现打砖块游戏
2020/02/25 Javascript
使用Python解析JSON数据的基本方法
2015/10/15 Python
python基于pygame实现响应游戏中事件的方法(附源码)
2015/11/11 Python
python高效过滤出文件夹下指定文件名结尾的文件实例
2018/10/21 Python
BP神经网络原理及Python实现代码
2018/12/18 Python
Python3爬楼梯算法示例
2019/03/04 Python
Django vue前后端分离整合过程解析
2020/11/20 Python
让ie浏览器成为支持html5的浏览器的解决方法(使用html5shiv)
2014/04/08 HTML / CSS
高街生活方式全球在线商店:AZBRO
2017/08/26 全球购物
澳大利亚美容产品及化妆品在线:Activeskin
2020/06/03 全球购物
平面设计师工作职责范文
2013/12/03 职场文书
广告业务员岗位职责
2014/02/06 职场文书
大学生求职计划书
2014/04/30 职场文书
2015年档案管理员工作总结
2015/05/13 职场文书
甜美蛋糕店的创业计划书模板,拿来即用!
2019/08/21 职场文书
Go语言空白表示符_的实例用法
2021/07/04 Golang
如何利用Python实现一个论文降重工具
2021/07/09 Python
dubbo服务整合zipkin详解
2021/07/26 Java/Android
Python find()、rfind()方法及作用
2022/12/24 Python