首页 > 系统相关 >Python 多进程之间共享变量

Python 多进程之间共享变量

时间:2023-06-06 14:44:08浏览次数:50  
标签:__ 变量 Python list num dict 共享 my

原文地址:https://blog.51cto.com/alwaysbeta/5162851

Python 多线程之间共享变量很简单,直接定义全局 global 变量即可。而多进程之间是相互独立的执行单元,这种方法就不可行了。

不过 Python 标准库已经给我们提供了这样的能力,使用起来也很简单。但要分两种情况来看,一种是 Process 多进程,一种是 Pool 进程池的方式。

Process 多进程

使用 Process 定义的多进程之间共享变量可以直接使用 multiprocessing 下的 Value,Array,Queue 等,如果要共享 list,dict,可以使用强大的 Manager 模块。

import multiprocessing
def func(num):
    # 共享数值型变量
    # num.value = 2

    # 共享数组型变量
    num[2] = 9999

if __name__ == '__main__':
    # 共享数值型变量
    # num = multiprocessing.Value('d', 1)
    # print(num.value)

    # 共享数组型变量
    num = multiprocessing.Array('i', [1, 2, 3, 4, 5])
    print(num[:])

    p = multiprocessing.Process(target=func, args=(num,))
    p.start()
    p.join()

    # 共享数值型变量
    # print(num.value)

    # 共享数组型变量
    print(num[:])

Pool 进程池

进程池之间共享变量是不能使用上文方式的,因为进程池内进程关系并非父子进程,想要共享,必须使用 Manager 模块来定义。

from multiprocessing import Pool, Manager
def func(my_list, my_dict):
    my_list.append(10)
    my_list.append(11)
    my_dict['a'] = 1
    my_dict['b'] = 2
if __name__ == '__main__':
    manager = Manager()
    my_list = manager.list()
    my_dict = manager.dict()

    pool = Pool(processes=2)
    for i in range(0, 2):
        pool.apply_async(func, (my_list, my_dict))
    pool.close()
    pool.join()

    print(my_list)
    print(my_dict)

还有一点需要注意,在共享 list 时,像下面这样写 func 是不起作用的。

def func(my_list, my_dict):
    my_list = [10, 11]
    my_dict['a'] = 1
    my_dict['b'] = 2

这样写相当于重新定义了一个局部变量,并没有作用到原来的 list 上,必须使用 append,extend 等方法。

标签:__,变量,Python,list,num,dict,共享,my
From: https://www.cnblogs.com/duoba/p/17460490.html

相关文章

  • Linux 环境变量
    /etc/profile vi编辑追加行export$JAVA_HOME=/usr/local/jdk1.7 保存退出 source/etc/profile使其立即生效  ......
  • Python tkinter 树形列表控件(Treeview)的使用简单举例,建立一个treeview
     importtkinterastkfromtkinter.ttkimportTreeview#创建tkinter应用程序窗口root=tk.Tk()#设置窗口大小和位置root.geometry('500x300+400+300')#不允许改变窗口大小root.resizable(False,False)#设置窗口标题root.title('通信录管理系统')#使用Tree......
  • 实验6 turtle绘图和Python库应用编程体验
    实验任务1task1_1.py源代码1fromturtleimport*23defmove(x,y):4penup()5goto(x,y)6pendown()78defdraw(n,size=100):9foriinrange(n):10fd(size)11left(360/n)1213defmain():14pensize(2)1......
  • 如何在Python中使用JSON模块
    JSON(JavaScriptObjectNotation)是一种流行的轻量级数据交换标准。它表示由键值对组成的数据结构,非常简单易懂。JSON已成为在线服务之间数据交换的行业标准。它广泛用于现代编程语言,包括Python。JSON数据经常表示为嵌套字典、列表和标量值,例如文本、数字、布尔值和空值。之所......
  • python离线下载安装包
    1.背景内网服务器不能直接连接外网,但是需要Python的mysql-connector-2.1.7包2.步骤#下载相关tar包https://pypi.doubanio.com/simple/mysql-connector/mysql-connector-2.1.7.tar.gz#上传到服务器后,解压tar-zxvfmysql-connector-2.1.7.tar.gz#进入解压目录,安装cdm......
  • python redis 链接集群 阿里云集群
    前言集群redis不支持选dbcluster方法里没有支持选中db的选项,javapy都不行#pipinstallredis==3.5.3#pipinstallredis-py-cluster==2.1.3#亲测,我是使用的这两个版本进行处理的fromredisclusterimportRedisClusternodes=[{"host":"dsfwwqfggy65aadfggi.redis.r......
  • 2.1 变量与数据类型
    在Python中,变量是用来存储数据的容器。数据类型是用来规定这些数据的类型,例如整数、浮点数和字符串等。接下来我们将详细了解Python中的变量和一些常见的数据类型。2.1.1变量的命名和赋值变量命名规则:变量名必须以字母(大写或小写)或下划线(_)开头,后面可以跟字母、数字或下划线。......
  • 第一章 初识C语言-第一节(C语言固定程序;全局变量和局部变量)
    c语言主函数固定程序#include<stdio.h>intmain(){return0;}全局变量和和局部变量全局变量定义在程序块前,局部变量定义在程序块中。intnum1=0; //num1是全局变量,其使用域可在整个程序块intmain(){{intnum2=2; //num2是局部变量,其使用于域在当前程序块}printf("%d\n",,num2);......
  • python中同时指定多个分隔符将字符串拆分为列表
     001、>>>str1="ab_cdef_ghij_kl"##测试字符串>>>str1.split("")##一句空格进行拆分['ab_cd','ef_gh','ij_kl']>>>importre>>>re.split("......
  • Windows环境FFmpeg下载、环境变量配置
    FFmpeg官网下载地址第一步:点击Download下载按钮第二步:选择适合当前的运行环境,选择windows第一个地址Windowsbuildsfromgyan.dev第三步:选择releasebuilds中合适的版本第四步:环境变量配置,我安装的目录是:E:\ProgramFiles\ffmpeg-6.0-essentials_build点击ffmpeg安装......