python 进程间数据共享multiProcess.Manger实现解析

yizhihongxing

下面我将详细讲解“Python进程间数据共享multiProcess.Manager实现解析”的完整攻略。

什么是进程间数据共享?

在并发编程中,进程间数据的共享是必不可少的一个环节。因为不同进程之间是互相独立的,如果不进行数据共享,则各个进程之间无法进行数据交互,从而无法实现并发编程的效果。

Python中的进程间数据共享

在Python中,可以使用multiProcessing库实现进程间数据共享。其中,multiProcessing.Manager类封装了一些方法,可以实现多个进程之间的数据共享,方便进行并发编程。下面,我们就来详细介绍如何使用multiProcessing.Manager来实现多个进程之间的数据共享。

Step1:创建Manager对象

首先,我们需要创建一个Manager对象,用于创建一些共享的数据类型,例如List、Dict等。创建方法如下:

from multiprocessing import Manager

manager = Manager()

Step2:使用Manager对象创建共享数据对象

上面创建的Manager对象,可以通过一些方法,来创建一些共享的数据类型。常用的方法有:list、dict、Namespace等。这些方法可以看作是对原有数据类型的一种共享实现。示例如下:

shared_list = manager.list()
shared_dict = manager.dict()
shared_ns = manager.Namespace()

Step3:在子进程中获取共享的数据对象

在子进程中获取共享的数据对象,需要使用Manager的方法,在该方法中,指定需要共享的数据类型。获取的数据对象,可以直接在子进程中修改,修改后的值会自动同步给其他进程。示例如下:

from multiprocessing import Process

def child_process(shared_list, shared_dict):
    shared_list.append(1)
    shared_dict['key'] = 'value'

p = Process(target=child_process, args=(shared_list, shared_dict))
p.start()
p.join()

Step4:使用共享数据对象

在主进程中,可以直接使用共享数据对象,获取其中保存的数据。示例代码如下:

print(shared_list[0])
print(shared_dict['key'])

示例说明

下面,我们来看两个示例,分别是使用Manager实现的进程池和计数器。

示例1:进程池

from multiprocessing import Pool, Manager

def foo(data, shared_list):
    res = data * 2
    shared_list.append(res)
    return res

if __name__ == '__main__':
    manager = Manager()
    shared_list = manager.list()

    with Pool(4) as p:
        p.starmap(foo, [(i, shared_list) for i in range(10)])

    print(shared_list)

在该示例中,我们首先创建了一个Manager对象,并使用该对象创建了一个共享的List。然后,我们使用Pool创建4个进程,每个进程执行foo函数,将数据乘以2,然后将结果加入共享的List中。最后,输出共享List中的数据。

示例2:计数器

from multiprocessing import Process, Manager

def child_process(shared_ns):
    shared_ns.counter += 1

if __name__ == '__main__':
    manager = Manager()
    shared_ns = manager.Namespace()
    shared_ns.counter = 0

    processes = []
    for i in range(10):
        p = Process(target=child_process, args=(shared_ns,))
        processes.append(p)
        p.start()

    for p in processes:
        p.join()

    print(shared_ns.counter)

在该示例中,我们创建了一个计数器共享对象,然后使用10个子进程分别将共享对象中计数器加1。最后,输出计数器加1后的结果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python 进程间数据共享multiProcess.Manger实现解析 - Python技术站

(0)
上一篇 2023年5月13日
下一篇 2023年5月13日

相关文章

  • 表格梳理解析python内置时间模块看完就懂

    表格梳理解析Python内置时间模块看完就懂 介绍 Python内置的时间模块datetime提供了处理日期和时间的函数和类,可以帮助我们方便地进行时间计算和转换。本文将详细讲解datetime模块的各个函数和类的用法,以及示例说明,让读者能够轻松理解和使用。 datetime类 datetime是datetime模块最常用的类,表示一个日期和时间的对象。类…

    python 2023年6月6日
    00
  • Python matplotlib 绘制双Y轴曲线图的示例代码

    接下来我会详细讲解“Python matplotlib 绘制双Y轴曲线图的示例代码”的完整攻略。 1. 准备环境 在讲解Python matplotlib绘制双Y轴曲线图示例之前,我们需要先安装matplotlib这个库。如果你的电脑还没有安装这个库,请使用pip安装: pip install matplotlib 2. 创建基础图形与两个子图 通过调用ma…

    python 2023年5月19日
    00
  • 解决安装python库时windows error5 报错的问题

    解决安装Python库时WindowsError 5报错的问题攻略 在安装Python库时,有时会遇到WindowsError 5报错的问题。这个错误通常是由于权限引起的。本攻略将介如何解决这个错误,并提供两个例。 解决方法 在解决WindowsError 5错的问题时,我们可以尝试以下方法: 以管理员身份运行命令符或Anaconda Prompt 修改安装…

    python 2023年5月13日
    00
  • Python re正则表达式元字符分组()用法分享

    以下是详细讲解“Python re正则表达式元字符分组()用法分享”的完整攻略,包括分组的概念、语法和两个示例说明。 分组的概念 在正则表达式中,分组是指将个字符组合在一起,形成一个整体,以便对其进行操作。分组可以用括号()来表示,括号内的字符被视为一个整体。 分组可以用于多种正则表达式操作,如匹配、替换、捕获等。分组还可以嵌套使用,形成更复杂的正则表达式。…

    python 2023年5月14日
    00
  • 打印语句在 PSP 中不起作用(Python 服务器页面)

    【问题标题】:Print statement not working in PSP (Python server pages)打印语句在 PSP 中不起作用(Python 服务器页面) 【发布时间】:2023-04-01 12:12:01 【问题描述】: 下面是python服务器页面(PSP)的代码;使用 mysqldb,我试图从表“addr”中获取记录,然…

    Python开发 2023年4月8日
    00
  • python如何将自己的包上传到PyPi并可通过pip安装的方法步骤

    下面是详细讲解“python如何将自己的包上传到PyPi并可通过pip安装的方法步骤”的完整攻略。 前置准备 在上传包之前,请先确保已经安装了pip和setuptools。可以通过在终端中输入以下命令进行检查: pip –version pip3 –version easy_install –version 如果以上命令中有一个或者多个是可用的(显示了…

    python 2023年5月14日
    00
  • python 制作自定义包并安装到系统目录的方法

    Python 是一门流行的编程语言,灵活性高、易于学习,能够实现许多应用。在编写 Python 代码时,我们常常需要用到各种不同的模块。对于重复使用的代码,我们可以将它们打包成一个包,方便管理和调用代码。 本文将介绍 Python 制作自定义包并安装到系统目录的方法。下面是详细的步骤: 1.创建包目录结构 第一步是创建包的目录结构。在包的根目录下,应该包含一…

    python 2023年5月30日
    00
  • Tornado协程在python2.7如何返回值(实现方法)

    Tornado是一个高性能的Python Web框架,它支持协程(coroutines)并且基于回调(callbacks)。协程是一种轻量级线程,可用于提高Python中异步编程的效率。在Python 2.7中,Tornado中的协程可以通过两种方法来返回值。 使用tornado.gen.Return 在Python 2.7中,可以使用tornado.gen…

    python 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部