Python通过4种方式实现进程数据通信
作者:我太难了008 发布时间:2023-11-04 15:13:48
标签:python,进程,数据,通信
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'}
来源:https://www.cnblogs.com/z-qinfeng/p/12064529.html
0
投稿
猜你喜欢
- 在blueidea上看到movoin转的一个动态加载include文件代码,接着dnawo又修改了下,我用了dnawo修改后的版本,感觉挺好
- SEO是指搜索引擎优化,主要就是通过对网站的结构、标签、排版等各方面的优化,使搜索引擎更容易抓取网站的内容,并且让网站的各个网页在等搜索引擎
- 原文:Unobtrusive Ajax。今天才看见的一个Presentation,是Jesse Skinner在06年10月发表的。虽然题目
- 对于每个类型拥有的值范围以及并且指定日期何时间值的有效格式的描述见7.3.6 日期和时间类型。 1、这里是一个使用日期函数的例子。
- 自打 Lokesh Dhakar 创造了第一个lightbox应用以来, 相册和弹出窗口方式便跨进了新的时代, 甚至那些lightbox应用
- 创建与打开站点启动FrontPage XP,选择菜单“文件/新建”,再单击“网页或站点”命令选项。在“新建网页或站点”任务窗格
- 对于大多数数据科学家而言,线性回归方法是他们进行统计学建模和预测分析任务的起点。这种方法已经存在了 200 多年,并得到了广泛研究,但仍然是
- 在HTML中,常见的URL有多种表示方式:相对URL: example.php demo
- 在 CodeBit.cn 的论坛中,有人问 Javascript 中如何截取小数位并实现四舍五入,这是一个很常用的 js 技术,帖子中也有网
- 今天一个域名查询系统出现故障,该系统是用的ASP调用XMLHTTP获取whois库的数据,具体错误如下: msxml3.dll 错
- YUI 中的 Grids CSS 主要有三个部分值得大家关注和学习:Yahoo!网站性能最佳体验的34条黄金守则—内容 1、布局的思想:使用
- 不久前因业务需要,我在自己的笔记本中安装了搜霸。当时一个做平面的朋友过来和我做一些设计交流,我在笔记本前准备输入一个网址,他靠近我的电脑,大
- 在网站的一些应用中需要提供用户直接打印页面的功能,最明显的就是电子优惠券,商家根据网站提供的模板输入内容,然后生成优惠券页面,用户打印这个页
- 许多网页开发者想从ASP.NET 页面传递一个值到另一个页面(比如从一个框架frame页面到一个弹窗页面)。看了代码就明白了。呵呵。(一)向
- 首先说明下范围用Javascript来开发WEB页面的动画效果该思路同时考虑页面效率、SEO,如果数据大,也可以缓解后端压力。这个是程序设计
- 当我们使用访问一个没有声明的变量时,JS会报错;而当我们给一个没有声明的变量赋值时,JS不会报错,相反它会认为我们是要隐式申明一个全局变量。
- 前言亲人工作考试,公司给的题库好像是直接从数据库导出的表格Excel形式,在移动端上非常难看,需要不断左右上下滑动,看不了多少题眼就瞎了,遂
- 前言GO语言在WEB开发领域中的使用越来越广泛,Hired 发布的《2019 软件工程师状态》报告中指出,具有 Go 经验的候选人是迄今为止
- 过年这段时间由于线上数据库经常压力过大导致响应非常缓慢甚至死机,咬咬牙下大决心来解决效率不高的问题!首先是由于公司秉承快速开发原则,频繁上线
- 1 简介本篇主要介绍使用pytorch实现基于CharRNN来进行文本分类与内容生成所需要的相关知识,并最终给出完整的实现代码。2 相关AP