python多进程共享变量使用技巧

Python多进程共享变量实现方法 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 阅读详情

python中多进程共享内存主要有multiprocessing.Manager()、 multiprocessing的shared_memory的方法,这两种方法都是python内置模块,其中shared_memory是python3.8之后新加入的功能,如果使用必须要用python3.8以上的版本。以下介绍两种方式的区别:

1.multiprocessing.Manager()

有多个数据类型可以使用,包括Manager支持的类型有list,dict,Namespace,Lock,RLock,Semaphore,BoundedSemaphore,Condition,Event,Queue,Value和Array,等数据类型。

示例代码段:

# -*- coding:utf-8 -*-
from multiprocessing import Process, Manager
import time
import random
def kkk(a_list, number):
  for i in range(10):
    a_list.append(i)
    time.sleep(random.randrange(2))
    print('这是进程{} {}'.format(number, a_list))
  print('这是进程{} {}'.format(number, a_list))
def jjj(a_list):
  for i in range(2):
    process = Process(target=kkk, args=(a_list, i))
    process.start()
if __name__ == '__main__':
  manager = Manager()
  a_list = manager.list()
  # a_list = []
  process_0 = Process(target=jjj, args=(a_list,))
  process_0.start()
  process_0.join()
  print(a_list)
  print(len(a_list))
  print('it\'s ok')

2.shared_memory和shareableList

 SharedMemory 用于多核或对称多处理器(SMP)计算机上的一个或多个进程访问的共享内存的分配和管理。为了帮助共享内存的生命周期管理,特别是在不同的进程中,一个 BaseManager 子类, SharedMemoryManager ,也在 multiprocessing.managers 模块。

在这个模块中,共享内存指的是“SystemV样式”的共享内存块(尽管不一定要这样明确地实现),而不是“分布式共享内存”。这种类型的共享内存允许不同的进程潜在地读写到易失性内存的公共(或共享)区域。通常情况下,进程只能访问自己的进程内存空间,但共享内存允许进程之间共享数据,从而避免了在包含该数据的进程之间发送消息的需要。与通过磁盘或套接字或其他需要数据序列化/反序列化和复制的通信共享数据相比,直接通过内存共享数据可以提供显著的性能优势。

示例代码:

from multiprocessing import shared_memory
shm_a = shared_memory.SharedMemory(create=True, size=10)
type(shm_a.buf)
<class 'memoryview'>
buffer = shm_a.buf
len(buffer)
10
buffer[:4] = bytearray([22, 33, 44, 55])  # Modify multiple at once
buffer[4] = 100                           # Modify single byte at a time
# Attach to an existing shared memory block
shm_b = shared_memory.SharedMemory(shm_a.name)
import array
array.array('b', shm_b.buf[:5])  # Copy the data into a new array.array
array('b', [22, 33, 44, 55, 100])
shm_b.buf[:5] = b'howdy'  # Modify via shm_b using bytes
bytes(shm_a.buf[:5])      # Access via shm_a
b'howdy'
shm_b.close()   # Close each SharedMemory instance
shm_a.close()
shm_a.unlink()  # Call unlink only once to release the shared memory

3.总结对比

我通过实验对比,总结了以下经验:

1 sharedMemory和shareableList本质上是同一种实现机制,都会随共享内存空间增大,访问时间明显增大;multiprocessing.Manager()随共享内存空间增大,访问时间几乎不变。

2 shareableList只支持小缓存(10M以内),且相同缓存大小情况下,shareableList效果比Manager好10倍

3 需共享内存空间较小部分,推荐用shareableList;需共享内存空间较大部分,推荐用Manager

如果你有了解的更好的python多进程共享机制,可以在下方评论告诉我。

Python 多进程编程《*》:shared_memory 模块 目的是为了多进程编程提供共享内存功能,该模块主要包含两个类 SharedMemory 与 SharebleList, 后者在前者的基础之上进一步进行了封装。同时为了管理共享内存,在multiprocessing.managers定义了SharedMemoryManager, 进一步封装SharedMemory 与 SharebleList。... 阅读详情

相关推荐

python学习心得(2)多进程顺序执行

参照我的上一篇多线程的顺序执行https://blog.youkuaiyun.com/weixin_41950973/article/details/106213436 今天,同一个问题用进程来解决。注意点是,进程之间是完全独立的,所以在用condition对象时,需要将condition对象作为参数传递到进程类中,其他都和我上一篇的多线程的解决方法一致。(开始没有注意到这一点,完全照搬多线程的做法,总是得不到想要的结果,郁闷了半天。。。) 问:生成5个进程按照顺序来输出1234512345... 。其中1为进程1

weixin_41950973的博客 1058

python多进程通信、共享变量

进程是计算机中正在运行的程序的实例。多进程指的是同时运行多个进程。

Michael是个半路程序员 2051

Python多进程共享变量

在并发编程中,多进程是一种常见的方式,可以充分利用多核处理器的能力来提高程序的性能。然而,当多个进程同时访问和修改共享的变量时,就会产生竞争条件(Race Condition),导致程序的结果不确定或者出现错误。通过使用这些类,可以在多个进程之间安全地共享变量,并避免竞争条件的发生。需要注意的是,在多进程共享变量的过程中,由于进程之间是独立的,所以对共享变量的修改不会反映到其他进程中。然后,我们创建了5个进程,每个进程通过循环遍历数组,并将数组中的每个元素加1。为了实现多进程间的变量共享,我们可以使用。

HackNebulaZ的博客 696

python多进程之间共享变量

python多进程之间不能直接共享全局变量。

Major_S的博客 4177

Halcon 3D视觉实战:5步将线激光高度数据转为可分析的深度图与点云

本文详细介绍了如何利用Halcon平台将线激光高度数据转换为深度图与点云的5步实战方法。通过具体代码示例和工业检测案例(如锂电池胶水测量),帮助工程师高效处理3D视觉数据,实现从原始数据到三维可视化的完整技术链路。

weixin_29039773的博客 361

Part03 数据结构

本文介绍了CSP-S初赛中常见的高级数据结构及其实现,包括: 线性结构:双端栈、双端队列、单调队列、优先队列和ST表,重点分析了它们的特点、时间复杂度及典型应用场景。 集合与森林:并查集(带路径压缩和按秩合并)和树的孩子兄弟表示法,展示了多叉树转化为二叉树存储的方法。 特殊树结构:包括二叉堆、树状数组、线段树和字典树,详细说明了它们的构建、查询和更新操作,特别强调了线段树的递归实现和字典树的前缀匹配特性。 每种数据结构都配有核心C++代码实现,涉及数组模拟、动态规划和树形结构等编程技巧,适合算法竞赛选手快速

weixin_43863957的博客 1179

python 多进程共享变量 Value 使用技巧

python 多进程共享变量 Value 使用技巧 前言 在使用 **python **的多进程时,需要多个进程共享一个状态变量,于是考虑使用multiprocessing.Value,来进行进程之间的共享 一、Value 的构造函数: multiprocessingValue(typecode_or_type, *args[, lock]) 该方法返回从共享内存中分配的一个ctypes 对象,其中typecode_or_type定义了返回的类型。它要么是一个ctypes类型,要么是一个代表ctypes类

weixin_45860565的博客 1267

EPLAN Electric P8 2025安装避坑指南:硬件、.NET 6与VM配置全解析

EPLAN Electric P8 是面向工业自动化电气设计的工程级CAD平台,其核心依赖于.NET运行时、DirectX硬件加速与本地许可证验证机制。随着2025版升级至.NET 6.0 Runtime、DirectX 12渲染引擎及双模授权校验,安装失败率显著上升——尤其在显卡驱动陈旧、虚拟机环境或企业离线场景下。技术价值在于保障PLC柜体布局、端子排自动生成、电缆清册输出等产线级功能稳定运行;典型应用场景包括高校电赛控制系统设计、包装线电控图纸交付及集成商多版本协同部署。本文聚焦EPLAN 2025安

weixin_30897079的博客 554

python 多进程共享变量中的manager

因为需要提升效率,所以不可避免的用到了多进程。毕竟python中的多线程是伪多线程。 在多进程中经常需要共享变量,这时可以使用Queue等方式来解决,有时候我们还可以用multiprcessing中的manager。manager还可以很方便的实现进程内和进程外的交互。 manager常用的两个方法list,dict manager = Manager() d = manager.dict...

weixin_40671801的博客 1075

Halcon实战:5个工业质检案例教你玩转机器视觉(附完整代码)

本文通过5个工业质检实战案例,详细拆解了如何运用Halcon视觉软件库解决精密测量、包装检测、字符识别、透明物缺陷检测及深度学习质检等复杂问题。每个案例均提供完整代码与核心思路,旨在帮助工程师掌握从问题分析到方案落地的系统方法论,提升机器视觉项目的实战能力与鲁棒性。

nut55的博客 260

FreeRTOS面试题汇总

如果一个低优先级的任务持有一个信号量,高优先级的任务想要用这个信号量,造成的死锁怎么解决。12.FreeRTOS的多任务之间如何去进行通信的,什么方法,它实现原理是什么。任务间数据传输一共有三种形式,用的最多的是消息队列,其次是全局变量和信号量。简历上写了了解RTOS,问了rtos的问题,用过哪些函数。讲解FreeRtos原理,调度机制,底层原理,代码调用。FreeRTOS,你的三个任务控制,请问你是怎么实现的。freertos中EventBits_t是干啥的?freertos使任务切换的方式有哪些?

weixin_45636780的博客 1万+

【问题整理】python在多进程间同步变量时遇到的问题

多进程编程是提升计算效率的一种重要方法,关于其介绍可以参见参考内容1。python3提供了multiprocessing标准库来支持跨平台的多进程编程,非常方便。最近在利用该标准库进行编程,发现在进程间实现变量共享(通信)时,有一些细节问题跟常规理解不太一致,如果不清楚,会在使用时带来不小的麻烦。 1.问题提出 假设有一个长度为L,每个位置的初始值为0的向量;再给定一个函数f,该函数的作用是将任意...

芳樽里的歌的博客 1548

Utrust4701F与Utrust2700R读写器在银河麒麟系统的安装及测试步骤说明

Utrust4701F与Utrust2700R读写器支持银河麒麟系统,广泛应用会员管理、支付管理等领域。本文将重点介绍Utrust4701F与Utrust2700R读写器在银河麒麟系统的安装及测试步骤说明。以上方法适用于主流国产操作系统,如 优麒麟(UbuntuKylin)/ 中标麒麟(NeoKylin) / UOS(统信操作系统)/ 中兴新支点 / 红旗 linux(redflag linux)/ 普华 Linux(I-soft OS) / 威科乐恩 Linux(WiOS)等

华翔天诚科技 1833

多进程任务中的共享变量问题

多进程任务中的共享变量问题 做项目的时候遇到需要处理多进程问题,遇到一些坑,记录一下。本文所探讨的问题主要依据multiprocessing这个python库完成。 1、若多个进程间不需要处理共享变量,只涉及到主进程和子进程间的数据交互,则可以使用pipe管道或者quene队列。下面给出一个用pipe管道实现主进程和次进程通信的代码。 import multiprocessing as mp from multiprocessing import Process import pymysql def r

weixin_41946656的博客 1732

SpringBoot项目搭建

SpringBoot项目搭建

私信可回答各种问题~ 1022

TMC2240 芯片数据手册解读|第三篇 TMC2240 芯片引脚配置与说明

本文详细解析了TMC2240芯片的两款封装(TQFN32和TSSOP38-EP)的引脚分布、电气属性及硬件设计要点。内容涵盖:1)芯片内部功能架构,包括供电、运动控制等五大链路;2)两款封装的核心规范与适用场景;3)七大引脚分类详解(电源、控制、编码器等)及接线要求;4)PCB设计避坑指南,强调电源分割、电荷泵布局等关键点。文章提供完整的原理图绘制和硬件调试指导,适合不同基础的工程师参考实践。

BackCatK Chen的博客 1092

Python多任务之多进程开发

目录 1 多任务的介绍 2 多任务的执行方式 3 进程介绍 4 多进程的使用 4.1 多进程的体验 4.1.1 导入进程包 4.1.2 Process进程类的说明 4.1.3 多进程完成多任务的代码 4.1.4 小结 4.2 获取进程编号 4.2.1 获取当前父进程编号 4.2.2 小结 4.3 进程执行带有参数的任务 4.3.1 进程执行带有参数的任务的介绍 4.3.2 args参数的使用 4.3.3 kwargs参数的使用 4.3.4 小结 4.4 进程的注意点 4.4.1 进程的注意点介绍......

赵广陆 431

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

python(二):使用multiprocessing中的常见问题

简介 在python的解释器中,CPython是应用范围最广的一种,其具有丰富的扩展包,方便了开发者的使用。当然CPython也不是完美的,由于全局解释锁(GIL)的存在,python的多线程可以近似看作单线程。为此,开发者推出了multiprocessing,这里介绍一下使用中的常见问题。 环境 >>> import sys >>> print(sys.ve...

平头哥(Adger)的博客 1459

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

python多进程案例

使用进程时一定要用if==“”:否则会出错这个代码首先定义了一个锁lock,然后在锁的作用下定义了函数addnum,python多进程中,最后在循环中创建了6个进程去执行函数,最后输出是所有的num都为2。原因:因为创建进程时,所有的进程都会拷贝父进程的所有资源,所以每一个进程都会有自己的num,执行函数时,它们分别为自己的num加1,所以最后输出都为2.如果需要共享资源,下面有3个方法,分别是Value、Manager、Queue。

m0_63342293的博客 506

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

『Python』多进程处理

尝试学习python的多进程模组,对比多线程,大概的区别在:   1.多进程的处理速度更快   2.多进程的各个子进程之间交换数据很不方便 多进程调用方式   进程基本使用multicore()   进程池优化进程的调用multicore_pool(),在使用进程池的时候,运许函数有return,而基本用法中进程是接收不了return的   进程队列用法,大部分方法和python...

weixin_30235225的博客 78

Python3中multiprocessing的Process创建子进程在Windows和Linux下的区别

结论: 尽量在Linux中使用多进程,Linux中更遵循程序设计之初的规范 # -*- coding: utf-8 -*- import multiprocessing as mp from time import sleep import os a = 1 print("[父/子] PID", os.getpid(), a, "===================") def fun(x...

NO FATE 1479

python输入数组map_在Python多处理中将Pool.map与共享内存数组结合

当我刚看到赏金的时候再试一次;)基本上,我认为错误消息的含义是它的意思-多处理共享内存数组不能作为参数传递(通过酸洗)。序列化数据没有意义-关键是数据是共享内存。因此,您必须使共享数组成为全局数组。我认为像我的第一个答案一样,将其作为模块的属性比较整洁,但在示例中将其保留为全局变量也可以很好地工作。考虑到您不想在fork之前设置数据的观点,这是一个修改后的示例。如果您希望拥有多个共享数组(这就是为...

weixin_39657825的博客 109

Python 多进程之间共享变量

Python 多线程之间共享变量很简单,直接定义全局 global 变量即可。而多进程之间是相互独立的执行单元,这种方法就不可行了。 不过 Python 标准库已经给我们提供了这样的能力,使用起来也很简单。但要分两种情况来看,一种是 Process 多进程,一种是 Pool 进程池的方式。 Process 多进程 使用 Process 定义的多进程之间共享变量可以直接使用 multiprocessing 下的 Value,Array,Queue 等,如果要共享 list,dict,可以使用强大的 Manag

AlwaysBeta 的专栏 2043

python多进程协同_浅谈python多进程共享变量Value的使用tips

浅谈python多进程共享变量Value的使用tips前言:在使用tornado的多进程时,需要多个进程共享一个状态变量,于是考虑使用multiprocessing.Value(对于该变量的具体细节请查阅相关资料)。在根据网上资料使用Value时,由于共享的是字符串,但网上介绍的都是整数或者字符,于是遇到了很多阻碍,通过查询官方文档得出了解决方案。一、Value的构造函数:Value的初始化非常简...

weixin_39611820的博客 992

python 多进程、多线程

1、多线程:   下面讲一个简单用法,这个模块比较简单,但是实际使用中会遇到很多坑 from multiprocessing import process def go(s): print "主线程 %s " % s if __name__ == "__main__": p = process.Process(target=go, args=(2,)) p....

weixin_30587025的博客 72
上一篇: python绘制甘特图代码
下一篇: 蜜獾算法(HBA)原理分析(含源代码)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智能优化_数据分析_AI算法

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值