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实现比较两个文件夹中代码变化的方法
Jul 10 Python
Python入门学习之字符串与比较运算符
Oct 12 Python
itchat和matplotlib的结合使用爬取微信信息的实例
Aug 25 Python
python随机取list中的元素方法
Apr 08 Python
python try except 捕获所有异常的实例
Oct 18 Python
Python二维码生成识别实例详解
Jul 16 Python
Python爬虫库BeautifulSoup的介绍与简单使用实例
Jan 25 Python
通过实例解析Python return运行原理
Mar 04 Python
Python实现AES加密,解密的两种方法
Oct 03 Python
python 实现音频叠加的示例
Oct 29 Python
python 利用百度API识别图片文字(多线程版)
Dec 14 Python
Python爬虫爬取ts碎片视频+验证码登录功能
Feb 22 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 mssql 时间格式问题
2009/01/13 PHP
PHP 编程安全性小结
2010/01/08 PHP
PHP添加Xdebug扩展的方法
2014/02/12 PHP
Linux系统递归生成目录中文件的md5的方法
2015/06/29 PHP
番茄的表单验证类代码修改版
2008/07/18 Javascript
jquery 1.4.2发布!主要是性能与API
2010/02/25 Javascript
JavaScript Eval 函数使用
2010/03/23 Javascript
使用jQuery清空file文件域的解决方案
2013/04/12 Javascript
fmt:formatDate的输出格式详解
2014/01/09 Javascript
js与jquery实时监听输入框值的oninput与onpropertychange方法
2015/02/05 Javascript
jquery+CSS3模拟Path2.0动画菜单效果代码
2015/08/31 Javascript
jQuery实现非常实用漂亮的select下拉菜单选择效果
2015/11/06 Javascript
jQuery简单入门示例之用户校验demo示例
2016/07/09 Javascript
vue实现组件之间传值功能示例
2018/07/13 Javascript
VUE v-for循环中每个item节点动态绑定不同函数的实例
2018/09/26 Javascript
浅谈vue后台管理系统权限控制思考与实践
2018/12/19 Javascript
angular中如何绑定iframe中src的方法
2019/02/01 Javascript
解决vue打包后vendor.js文件过大问题
2019/07/03 Javascript
Node Express用法详解【安装、使用、路由、中间件、模板引擎等】
2020/05/13 Javascript
Vue基于localStorage存储信息代码实例
2020/11/16 Javascript
Python编程实现双链表,栈,队列及二叉树的方法示例
2017/11/01 Python
python 3.0 模拟用户登录功能并实现三次错误锁定
2017/11/01 Python
python excel转换csv代码实例
2019/08/26 Python
如何从csv文件构建Tensorflow的数据集
2020/09/21 Python
Python Charles抓包配置实现流程图解
2020/09/29 Python
CSS实现半透明边框与多重边框的场景分析
2019/11/13 HTML / CSS
英国领先的家庭时尚品牌:Peacocks
2018/01/11 全球购物
泰国办公用品购物网站:OfficeMate
2018/02/04 全球购物
门卫班长岗位职责
2013/12/15 职场文书
党员入党表决心的话
2014/03/11 职场文书
三万活动总结
2014/04/28 职场文书
厂区绿化方案
2014/05/08 职场文书
党的群众路线教育实践活动总结报告
2014/07/03 职场文书
我的中国梦演讲稿800字
2014/08/19 职场文书
信息技术研修心得体会
2016/01/08 职场文书
Ajax实现三级联动效果
2021/10/05 Javascript