I need to parallelize a function that modifies values of one of the arguments. For example modify this simple code:
def Test(i, a, length):
if i % 2 == 0:
for x in range(0, length, 2):
a[x] = 2
else:
for x in range(1, length, 2):
a[x] = 1
a0 = numpy.ndarray(shape=10, dtype=numpy.uint8)
Test(0, a, a.shape[0])
Test(1, a, a.shape[0])
print(a)
I tried to use joblib using Parallel(n_jobs=2)(delayed(Test)(i, a, 10) for i in range(2)) and multiprocessing.Pool with:
with multiprocessing.Pool(processes=2) as Pool:
data = [(0, a, a.shape[0]), (1, a, a.shape[0])]
Pool.starmap(Test, data)
But both solutions do not work because they fork the data, so the parameters do not get modified.
What would be my options to do such parallelization?
multiprocessing.shared_memory.starmap? why notapply_async?starmapas I got used toapply_asyncin most of the occasions.apply_asyncandmap, I had to find out from the internet aboutstarmapwhich consumed some since I got immersed into few other things in the net.