python多进程数据共享

一、数据共享简介

multiprocessing.Manager 是 Python 的 multiprocessing 模块中的一个类,它提供了一种方便的方法来创建共享对象,这些共享对象可以被多个进程安全地访问和修改。使用 Manager 可以解决多进程并发访问共享资源时的同步问题。

二、常用方法

1、创建共享对象:

使用 Manager 的 dict()、list()、Value()、Array() 等方法可以创建共享的字典、列表、值和数组等对象。
这些共享对象由 Manager 进程管理,可以在多个进程之间安全地共享和操作。

2、安全的进程间通信:

Manager 内部使用进程间通信(IPC)机制来确保共享对象的同步和一致性。
这意味着在多进程环境中,多个进程可以同时访问和修改共享对象,而不会出现数据损坏或其他问题。

3、支持多种数据类型:

Manager 提供了对多种常见数据类型的支持,包括字典、列表、值和数组等。
可以根据需要选择适合的共享对象类型来共享数据。

4、方便的使用方法:

使用 Manager 创建共享对象非常简单,只需调用 Manager 的相应方法即可创建所需类型的共享对象。
共享对象的创建和管理都由 Manager 处理,无需手动处理进程间通信等细节。

5、上下文管理器:

Manager 可以作为上下文管理器使用,以确保在使用完共享对象后正确关闭和释放资源。
使用 with 语句可以方便地管理共享对象的生命周期。

三、直接进程传参的区别

使用 multiprocessing.Manager 和直接传递普通字典变量之间的主要区别在于并发访问的安全性和数据同步。

使用 multiprocessing.Manager:

multiprocessing.Manager 提供了一种线程安全的方式来创建共享对象,如字典、列表等。
这些共享对象由 Manager 管理,可以被多个进程安全地访问和修改。
在内部,Manager 使用了进程间通信(IPC)来确保数据同步和一致性,因此可以保证并发访问时不会出现数据损坏或其他问题。

直接传递普通字典变量:

如果直接传递普通的字典变量给多个进程,每个进程将拥有自己的独立副本。
这意味着每个进程操作的都是自己的字典副本,而不是同一个共享的字典对象。
在多进程环境中,由于进程之间内存空间是独立的,因此普通字典变量的修改不会反映到其他进程的字典中。
总之,使用 multiprocessing.Manager 创建共享对象可以确保多个进程之间安全地共享和操作数据,而直接传递普通字典变量则会导致每个进程操作自己的独立副本,无法实现真正的共享。

四、案例

from multiprocessing import Process, Managerdef process_func1(shared_dict):shared_dict['key1'] = 'value1'shared_dict['key2'] = 'value2'def process_func2(shared_dict):shared_dict['key3'] = 'value3'if 'key1' in shared_dict:del shared_dict['key1']if __name__ == '__main__':with Manager() as manager:shared_dict = manager.dict()process1 = Process(target=process_func1, args=(shared_dict,))process2 = Process(target=process_func2, args=(shared_dict,))process1.start()process2.start()process1.join()process2.join()print("Final shared dictionary:", shared_dict)#################################################################
Final shared dictionary: {'key2': 'value2', 'key3': 'value3'}
#################################################################

五、总结

1、创建进程时的普通传参,值发生变化后,其他进程中的变量值并不会改变

2、使用Manager创建变量传参,值发生变化后,其他进程中的值也会发生变化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/748927.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HarmonyOS ArkTS 渲染控制概述 if/else:条件渲染

ArkUI通过自定义组件的build()函数和builder装饰器中的声明式UI描述语句构建相应的UI。在声明式描述语句中开发者除了使用系统组件外,还可以使用渲染控制语句来辅助UI的构建,这些渲染控制语句包括控制组件是否显示的条件渲染语句,基于数组数据…

【数据结构】二叉树OJ题(C语言实现)

✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅ ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ 🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿&#x1…

【C#】int+null=null

C#语法,这玩意不报错 intnullnull,有点不合逻辑 (Int32)(bizRepair0rder.CreateTime. Value - regues.Mlodifylime.Value).TotalMinutes (Int32)(bizRepair0rder.CreateTime. Value - reques.llodifylime.Value).TotalMinutes nullstring是引用类型&…

机器学习-04-分类算法-03KNN算法

总结 本系列是机器学习课程的系列课程,主要介绍机器学习中分类算法,本篇为分类算法与knn算法部分。 本门课程的目标 完成一个特定行业的算法应用全过程: 懂业务会选择合适的算法数据处理算法训练算法调优算法融合 算法评估持续调优工程化…

冲动是魔鬼,工作不顺心时不要把坏脾气带给家人

今天与一个跟踪了很久的客户准备签合同了,客户突然反悔,为此与他周旋了一整天,忙碌得一口水都没有喝。回到小区坐在车里抽着烟,久久不愿回家,只想一个人坐着,疲惫、无奈。这个月的奖金似乎又将成为泡影。 …

AI - 决策树模型

🤔决策树算法 决策树的思想来源可以追溯到古希腊时期,当时的哲学家们就已经开始使用类似于决策树的图形来表示逻辑推理过程。然而,决策树作为一种科学的决策分析工具,其发展主要发生在20世纪。 在20世纪50年代,美国兰…

Machine Vision Technology:Lecture5 Local feature:Corners角点

Machine Vision Technology:Lecture5 Local feature:Corners角点 Motivation:panorama stitching全景图拼接提取良好特征Feature points applications特征点应用Finding Corners找角点Corner Detection:Basic Idea角点检测基本思想…

BeanPostProcessor子类中无法使用@GrpcClient或者@Autowired注入普通bean

BeanPostProcessor子类中无法使用GrpcClient或者Autowired注入普通bean 原因分析: 在Spring框架中,BeanPostProcessor 是一种特殊的bean,它的主要职责是在容器标准初始化流程前后对其他bean进行额外的预处理或后处理。BeanPostProcessor 的…

【数据结构和算法初阶(C语言)】队列实操(概念实现+oj题目栈和队列的双向实现以及循环链表难点题目详解!)

目录 1. 队列的概念及结构 2.队列结构存在的意义应用 3.队列实现的结构选择 4.队列实现 5.队列对数据的处理 5.1队列初始化 5.2队尾入数据 5.3队头出数据 5.4获取队列尾部元素 5.5获取队列头部元素 5.6获取队列中元素个数 5.7检测队列是否为空 5.8销毁队列 6.循环队列补充 7.使…

什么是分布式锁,分布式锁的几种实现方式

锁存在的意义: 原因其实很简单:因为我们想让同一时刻只有一个线程在执行某段代码。 因为如果同时出现多个线程去执行,可能会带来我们不想要的结果,可能是数据错误,也可能是服务宕机等等。 例如:某平台做活…

【AcWing】蓝桥杯集训每日一题Day5|归并排序|离散化|二分|逆序数对|505.火柴排队(C++)

火柴排队 505. 火柴排队 - AcWing题库难度:中等时/空限制:1s / 128MB总通过数:2058总尝试数:4484来源:NOIP2013提高组算法标签贪心离散化树状数组归并排序 题目内容 涵涵有两盒火柴,每盒装有 n 根火柴…

广度优先算法(一篇文章讲透)

目录 引言 一、算法概述 二、算法步骤 1 初始化 2 循环处理 三、算法应用 1 图的最短路径问题 2 网络爬虫 3 社交网络分析 4 游戏路径搜索 事例 四、算法特点与性能 五、性能优化 1 剪枝策略: 2 使用高效的数据结构: 3 并行化处理&#…

qt vs 编程 字符编码 程序从源码到编译到显示过程中存在的字符编码及隐藏的字符编码转换

理解字符编码,请参考:unicode ucs2 utf16 utf8 ansi GBK GB2312 CSDN博客 了解windows字符显示必须了解locale概念 参考:揭密 Windows 上的各种 locale - 知乎 汉字(或者说多字节字符)的存放需求,是计算…

IDEA创建Sping项目只能勾选17和21,没有Java8?

解决办法: 替换创建项目的源 我们只知道IDEA页面创建Spring项目,其实是访问spring initializr去创建项目。故我们可以通过阿里云国服去间接创建Spring项目。将https://start.spring.io/或者http://start.springboot.io/替换为 https://start.aliyun.com/

理解数学概念——同伦和简单连通域

1. 同伦(homotopy) 1.1 homotopy[hɒməʊˈtɒpi] n. (1) <<The Oxford English Dictionary>>第二版&#xff1a; [数学专用术语&#xff0c;这个词由德语homotopie改造而来&#xff0c;(Dehn & Heegaard Analysis Situs in Encykl.d.math.Wiss.(1907) I…

修改ubuntu的子网掩码

1、找到需要修改的子网掩码所在的网卡&#xff0c;一般inet addr不是127.0.0.1的那个网卡就是我们需要修改的网卡 2、执行 sudo vim /etc/network/interfaces 在文件中&#xff0c;通常能看到如下内容&#xff1a; iface <interface> inet static address <ip_addr…

【滤波专题-第8篇】ICA降噪方法——类EMD联合ICA降噪及MATLAB代码实现(以VMD-ICA为例)

今天来介绍一种效果颇为不错的降噪方法。&#xff08;针对高频白噪声&#xff09; 上一篇文章我们讲到了FastICA方法。在现实世界的许多情况下&#xff0c;噪声往往接近高斯分布&#xff0c;而有用的信号&#xff08;如语音、图像特征等&#xff09;往往表现出非高斯的特性。F…

测试环境搭建整套大数据系统(十一:docker部署superset,无密码登录嵌入html,http改为https)

一&#xff1a;安装docker 参考文档 https://blog.csdn.net/weixin_43446246/article/details/136554243 二&#xff1a;安装superset 下载镜像。 拉取镜像&#xff08;docker pull amancevice/superset&#xff09; 查看镜像是否下载完成&#xff08;docker images&#xf…

【Unity】旋转的尽头是使用四元数让物体旋转

// 导入必要的命名空间 using System.Collections; using System.Collections.Generic; using UnityEngine;// 创建一个名为 RotateObj 的 MonoBehaviour 类&#xff0c;该类可以附加到 Unity 中的游戏对象上并控制其行为 public class RotateObj : MonoBehaviour {// Update 函…

如何检测无源晶振过驱?晶振过驱怎么办?

无源晶振(Passive Crystal Oscillator)是一种使用晶体元件来生成稳定频率的振荡器&#xff0c;它不像有源振荡器(如时钟芯片)那样需要外部电源。检测无源晶振是否过驱通常需要通过测量其输出波形和频率&#xff0c;与期望的规格进行比较。 如何检测无源晶振过驱&#xff1a; …