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 20 Python
Python中subprocess模块用法实例详解
May 20 Python
通过数据库向Django模型添加字段的示例
Jul 21 Python
python 类对象和实例对象动态添加方法(分享)
Dec 31 Python
python pandas 如何替换某列的一个值
Jun 09 Python
Python中pandas dataframe删除一行或一列:drop函数详解
Jul 03 Python
Python中创建二维数组
Oct 17 Python
python 实现的发送邮件模板【普通邮件、带附件、带图片邮件】
Jul 06 Python
python内存动态分配过程详解
Jul 15 Python
解决Django中修改js css文件但浏览器无法及时与之改变的问题
Aug 31 Python
Python实现动态给类和对象添加属性和方法操作示例
Feb 29 Python
Python调用高德API实现批量地址转经纬度并写入表格的功能
Jan 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
PHP __autoload()方法真的影响性能吗?
2012/03/30 PHP
php判断电脑访问、手机访问的例子
2014/05/10 PHP
Laravel实现表单提交
2017/05/07 PHP
php实现的统计字数函数定义与使用示例
2017/07/26 PHP
yii框架使用分页的方法分析
2019/07/25 PHP
ajaxControlToolkit AutoCompleteExtender的用法
2008/10/30 Javascript
JavaScript操作XML实例代码(获取新闻标题并分页,并分页)
2010/05/25 Javascript
ASP.NET jQuery 实例14 在ASP.NET form中校验时间范围
2012/02/03 Javascript
js通过更改按钮的显示样式实现按钮的滑动效果
2014/04/23 Javascript
JavaScript DOM节点添加示例
2014/07/16 Javascript
快速掌握Node.js事件驱动模型
2016/03/21 Javascript
jQuery图片切换动画特效
2016/11/02 Javascript
浅谈Angular.js中使用$watch监听模型变化
2017/01/10 Javascript
详解JavaScript对象的深浅复制
2017/03/30 Javascript
jackson解析json字符串,首字母大写会自动转为小写的方法
2017/12/22 Javascript
Vue实现动态创建和删除数据的方法
2018/03/17 Javascript
基于jquery实现左右上下移动效果
2018/05/02 jQuery
JS函数进阶之prototy用法实例分析
2020/01/15 Javascript
Vue时间轴 vue-light-timeline的用法说明
2020/10/29 Javascript
Python本地与全局命名空间用法实例
2015/06/16 Python
Python中使用多进程来实现并行处理的方法小结
2017/08/09 Python
查找python项目依赖并生成requirements.txt的方法
2018/07/10 Python
python 多进程共享全局变量之Manager()详解
2019/08/15 Python
python路径的写法及目录的获取方式
2019/12/26 Python
python 实现简易的记事本
2020/11/30 Python
Python实现对word文档添加密码去除密码的示例代码
2020/12/29 Python
Python自动化测试基础必备知识点总结
2021/02/07 Python
基于html和CSS3制作酷炫的导航栏
2015/09/23 HTML / CSS
照片礼物和装饰:MyPhoto
2019/11/02 全球购物
德国户外装备、登山运动和攀岩商店:tapir store
2020/02/12 全球购物
怎样比较两个类型为String的字符串
2016/08/17 面试题
管理专员自荐信
2014/01/26 职场文书
音乐幼师求职信
2014/07/09 职场文书
超市店庆活动方案
2014/08/31 职场文书
清洁工个人工作总结
2015/03/05 职场文书
拾金不昧表扬信怎么写
2015/05/04 职场文书