如何在 Python 中的多处理期间访问全局变量 [重复]

Posted

技术标签:

【中文标题】如何在 Python 中的多处理期间访问全局变量 [重复]【英文标题】:How to access global variables during multiprocessing in Python [duplicate] 【发布时间】:2019-01-11 06:51:42 【问题描述】:

我在 Python 中使用多处理编写了以下玩具代码。

我希望函数func 并行运行并写入全局变量:varvarrvarrr。 然而,下面的代码只为varvarrvarrr 打印零。

如何让func修改全局变量varvarrvarrr???

import multiprocessing as mp
import itertools
import numpy as np

p = 3
ind = range(p)
ind_list = list(itertools.product(ind,ind,ind))

var = np.zeros([p,p,p])
varr = np.zeros([p,p,p])
varrr = np.zeros([p,p,p])

def func(ind_list):
    global var, varr, varrr
    i = ind_list[0]
    j = ind_list[1]
    k = ind_list[2]
    var[i][j] = i + j + k
    varr[i][j] = i*j*k
    varrr[i][j] = 2*i*j*k

for a in range(p):
    pool = mp.Pool()
    pool.map(func,ind_list)
    pool.close()
    pool.join()
    print('\n\n',var,'\n\n',varr,'\n\n',varrr,'\n\n')

【问题讨论】:

进程有独立的内存空间。它们不共享全局变量。还有其他方法可以在进程之间共享数据。 @Mathieu 请帮我修改代码以使其正常工作。 【参考方案1】:

正如一些 cmets 已经提到的,多处理不共享内存(即您不能从进程内访问全局变量)。 您可以使用管道在进程之间共享信息。

另一种选择是使用线程(共享内存)。 但是,由于全局解释器锁定,这在技术上不会完全并行运行。

【讨论】:

以上是关于如何在 Python 中的多处理期间访问全局变量 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

内存泄漏在哪里? python - 如何在python中的多处理期间使线程超时?

父进程全局变量如何复制到python多处理中的子进程

多处理池中的全局变量

从 C# 访问 C 全局变量 'errno'

自动化测试时需要使用python,请问如何理解python中的全局变量和局部变量?

python多处理子进程无法访问全局变量