I have written the following toy-code using multiprocessing in Python.
I want the function func
to run in parallel and also write to the global variables: var
, varr
and varrr
.
The following code however only prints zeros for var
, varr
and varrr
.
How do I make func
modify the global variables var
, varr
and varrr
???
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')