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爬取NUS-WIDE数据库图片
Oct 05 Python
python读取excel表格生成erlang数据
Aug 26 Python
python中将字典形式的数据循环插入Excel
Jan 16 Python
Sublime开发python程序的示例代码
Jan 24 Python
Python学习_几种存取xls/xlsx文件的方法总结
May 03 Python
对Python中列表和数组的赋值,浅拷贝和深拷贝的实例讲解
Jun 28 Python
pyqt5 QScrollArea设置在自定义侧(任何位置)
Sep 25 Python
Python常用数据分析模块原理解析
Jul 20 Python
python em算法的实现
Oct 03 Python
python 用opencv实现图像修复和图像金字塔
Nov 27 Python
python 制作网站筛选工具(附源码)
Jan 21 Python
Python函数式编程中itertools模块详解
Sep 15 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
php 之 没有mysql支持时的替代方案
2006/10/09 PHP
114啦源码(114la)不能生成地方房产和地方报刊问题4级页面0字节的解决方法
2012/01/12 PHP
php array_multisort 对数组进行排序详解及实例代码
2016/10/27 PHP
javascript 一些用法小结
2009/09/11 Javascript
javascript中call和apply方法浅谈
2013/09/27 Javascript
同域jQuery(跨)iframe操作DOM(示例代码)
2013/12/13 Javascript
基于jQuery和CSS3制作数字时钟附源码下载(jquery篇)
2015/11/24 Javascript
Nodejs中 npm常用命令详解
2016/07/04 NodeJs
React Native 集成jpush-react-native的示例代码
2017/08/16 Javascript
Vue-cli Eslint在vscode里代码自动格式化的方法
2018/02/23 Javascript
AngularJS实现的自定义过滤器简单示例
2019/02/02 Javascript
Vue Cli 3项目使用融云IM实现聊天功能的方法
2019/04/19 Javascript
vue页面更新patch的实现示例
2020/03/25 Javascript
[01:20:47]DOTA2-DPC中国联赛 正赛 Ehome vs Magma BO3 第一场 1月19日
2021/03/11 DOTA
python中dir函数用法分析
2015/04/17 Python
python 实现网上商城,转账,存取款等功能的信用卡系统
2016/07/15 Python
Python selenium文件上传方法汇总
2020/11/19 Python
Windows下Python2与Python3两个版本共存的方法详解
2017/02/12 Python
Python利用operator模块实现对象的多级排序详解
2017/05/09 Python
python数据封装json格式数据
2018/03/04 Python
python web自制框架之接受url传递过来的参数实例
2018/12/17 Python
python实现的MySQL增删改查操作实例小结
2018/12/19 Python
Django对models里的objects的使用详解
2019/08/17 Python
python如何保证输入键入数字的方法
2019/08/23 Python
Python的垃圾回收机制详解
2019/08/28 Python
python异步编程 使用yield from过程解析
2019/09/25 Python
matplotlib.pyplot画图并导出保存的实例
2019/12/07 Python
python pycharm最新版本激活码(永久有效)附python安装教程
2020/09/18 Python
详解Python3 中的字符串格式化语法
2020/01/15 Python
python 使用cycle构造无限循环迭代器
2020/12/02 Python
Etam德国:内衣精品店
2019/08/25 全球购物
网络通讯中,端口有什么含义,端口的取值范围
2012/11/23 面试题
C#中类(class)与结构(struct)的异同
2013/11/03 面试题
幼儿生日活动方案
2014/08/27 职场文书
合作协议书模板2014
2014/09/26 职场文书
2014年高中教师工作总结
2014/12/19 职场文书