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中的作用域规则和闭包
Mar 20 Python
python实现数据导出到excel的示例--普通格式
May 03 Python
基于tensorflow加载部分层的方法
Jul 26 Python
python爱心表白 每天都是浪漫七夕!
Aug 18 Python
使用python获取电脑的磁盘信息方法
Nov 01 Python
Python 实现中值滤波、均值滤波的方法
Jan 09 Python
用python做游戏的细节详解
Jun 25 Python
在python中画正态分布图像的实例
Jul 08 Python
Python使用lambda表达式对字典排序操作示例
Jul 25 Python
python如何从文件读取数据及解析
Sep 19 Python
Python 实现Serial 与STM32J进行串口通讯
Dec 18 Python
python获取本周、上周、本月、上月及本季的时间代码实例
Sep 08 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/03/10 日漫
PHP+FLASH实现上传文件进度条相关文件 下载
2007/07/21 PHP
上传文件先创建目录 再上传到目录里面去
2010/12/29 PHP
PHP中实现Bloom Filter算法
2015/03/30 PHP
PHP中$_SERVER使用说明
2015/07/05 PHP
yii实现使用CUploadedFile上传文件的方法
2015/12/28 PHP
Yii隐藏URL中index.php的方法
2016/07/12 PHP
PHPCMS2008广告模板SQL注入漏洞修复
2016/10/11 PHP
php 实现一个字符串加密解密的函数实例代码
2016/11/01 PHP
JavaScript 继承的实现
2009/07/09 Javascript
javascript语言结构小记(一)
2011/09/10 Javascript
jqPlot 图表中文API使用文档及源码和在线示例
2012/02/07 Javascript
XMLHttpRequest处理xml格式的返回数据(示例代码)
2013/11/21 Javascript
禁止iframe页面的所有js脚本如alert及弹出窗口等
2014/09/03 Javascript
简述Jquery与DOM对象
2015/07/10 Javascript
jquery SweetAlert插件实现响应式提示框
2015/08/18 Javascript
json对象与数组以及转换成js对象的简单实现方法
2016/06/24 Javascript
js的OOP继承实现(必看篇)
2017/02/18 Javascript
Vue.extend构造器的详解
2017/07/17 Javascript
jQuery条件分页 代替离线查询(附代码)
2017/08/17 jQuery
JavaScript判断输入是否为数字类型的方法总结
2017/09/28 Javascript
Vue引用第三方datepicker插件无法监听datepicker输入框的值的解决
2018/01/27 Javascript
js动态引入的四种方法
2018/05/05 Javascript
vue-cli 引入jQuery,Bootstrap,popper的方法
2018/09/03 jQuery
js实现多张图片每隔一秒切换一张图片
2019/07/29 Javascript
js实现简单掷骰子效果
2019/10/24 Javascript
Python list操作用法总结
2015/11/10 Python
Python发送form-data请求及拼接form-data内容的方法
2016/03/05 Python
Python实现的文本简单可逆加密算法示例
2017/05/18 Python
pytorch-RNN进行回归曲线预测方式
2020/01/14 Python
微软中国官方商城:Microsoft Store中国
2018/10/12 全球购物
Linux不知道文件后缀名怎么判断文件类型
2012/04/26 面试题
银行求职推荐信范文
2013/11/30 职场文书
小学教师年度个人总结
2015/02/05 职场文书
小爸爸观后感
2015/06/15 职场文书
高三语文教学反思
2016/02/16 职场文书