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局域网ip扫描示例分享
Apr 03 Python
使用Python生成url短链接的方法
May 04 Python
Python时间模块datetime、time、calendar的使用方法
Jan 13 Python
Collatz 序列、逗号代码、字符图网格实例
Jun 22 Python
简单了解python协程的相关知识
Aug 31 Python
Python递归实现打印多重列表代码
Feb 27 Python
手把手教你安装Windows版本的Tensorflow
Mar 26 Python
Python的in,is和id函数代码实例
Apr 18 Python
Matplotlib自定义坐标轴刻度的实现示例
Jun 18 Python
Python爬虫之App爬虫视频下载的实现
Dec 08 Python
Python+Appium实现自动化清理微信僵尸好友的方法
Feb 04 Python
python自动化测试之Selenium详解
Mar 13 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
cache_lite试用
2007/02/14 PHP
php实现读取内存顺序号
2015/03/29 PHP
ThinkPHP实现静态缓存和动态缓存示例代码
2017/05/02 PHP
PHP+AjaxForm异步带进度条上传文件实例代码
2017/08/14 PHP
PHP实现数组的笛卡尔积运算示例
2017/12/15 PHP
关于JavaScript的面向对象和继承有利新手学习
2013/01/11 Javascript
原生js实现改变随意改变div属性style的名称和值的结果
2013/09/26 Javascript
javascript实现简单的鼠标拖动效果实例
2015/04/10 Javascript
Node.js中Request模块处理HTTP协议请求的基本使用教程
2016/03/31 Javascript
学做Bootstrap的第一个页面
2016/05/15 HTML / CSS
JavaScript 随机验证码的生成实例代码
2016/09/22 Javascript
清除js缓存的多种方法总结
2016/12/09 Javascript
JavaScript实现移动端轮播效果
2017/06/06 Javascript
微信小程序实现页面跳转传值的方法
2017/10/12 Javascript
jQuery实现滚动效果
2017/11/17 jQuery
bootstrap datetimepicker控件位置异常的解决方法
2017/11/23 Javascript
详解js的视频和音频采集
2018/08/09 Javascript
微信小程序合法域名配置方法
2019/05/06 Javascript
vue组件添加事件@click.native操作
2020/10/30 Javascript
Python实现全角半角字符互转的方法
2016/11/28 Python
Python 实现12306登录功能实例代码
2018/02/09 Python
python 构造三维全零数组的方法
2018/11/12 Python
Python通用循环的构造方法实例分析
2018/12/19 Python
在自动化中用python实现键盘操作的方法详解
2019/07/19 Python
Python如何读写CSV文件
2020/08/13 Python
python向xls写入数据(包括合并,边框,对齐,列宽)
2021/02/02 Python
blueseventy官网:铁人三项和比赛泳衣
2021/02/06 全球购物
什么是Connection-oriented Protocol/Connectionless Protocol面向连接的协议/无连接协议
2012/09/06 面试题
网络方面基础面试题
2012/11/16 面试题
语文教育专业应届生求职信
2013/11/23 职场文书
高中生学习的自我评价
2013/12/14 职场文书
人力资源主管职责范本
2014/03/05 职场文书
书法兴趣小组活动总结
2014/07/07 职场文书
2014年民政局关于保密工作整改措施
2014/09/19 职场文书
公安局副政委班子个人对照检查材料
2014/10/04 职场文书
研究生就业推荐表导师评语
2014/12/31 职场文书