如何在Python中的多处理过程中访问全局变量



我使用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('nn',var,'nn',varr,'nn',varrr,'nn')

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

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

相关内容

  • 没有找到相关文章

最新更新