I'm trying to used multiprocessing shared array. I want to create two functions, each of which works with a common data set. But only one function modifies the array.
Here is my code:
import numpy as np
import multiprocessing as mp
import time
arr = mp.Array('f', np.array([1,2,3,4]))
def testfunc1(arr):
while True:
arr = np.concatenate((arr, np.array([0])))
print(arr)
time.sleep(2)
def testfunc2(arr):
while True:
arr[0] *= 2
time.sleep(2)
print(arr)
proc1 = mp.Process(target=testfunc1, args=(arr,))
proc2 = mp.Process(target=testfunc2, args=(arr,))
proc1.start()
proc2.start()
That's the result:
[1. 2. 3. 4. 0.]
[1. 2. 3. 4. 0. 0.]
<SynchronizedArray wrapper for <multiprocessing.sharedctypes.c_float_Array_4 object at 0x7fcd865bfdd0>>
<SynchronizedArray wrapper for <multiprocessing.sharedctypes.c_float_Array_4 object at 0x7fcd865bfdd0>>
[1. 2. 3. 4. 0. 0. 0.]
<SynchronizedArray wrapper for <multiprocessing.sharedctypes.c_float_Array_4 object at 0x7fcd865bfdd0>>
[1. 2. 3. 4. 0. 0. 0. 0.]
<SynchronizedArray wrapper for <multiprocessing.sharedctypes.c_float_Array_4 object at 0x7fcd865bfdd0>>
[1. 2. 3. 4. 0. 0. 0. 0. 0.]
testfunc2 doesn't seem to work. What do I do wrong?