Me gustaría usar una matriz numpy en memoria compartida para usar con el módulo de multiprocesamiento. La dificultad es usarlo como una matriz numpy, y no solo como una matriz ctypes.
from multiprocessing import Process, Array
import scipy
def f(a):
a[0] = -a[0]
if __name__ == '__main__':
# Create the array
N = int(10)
unshared_arr = scipy.rand(N)
arr = Array('d', unshared_arr)
print "Originally, the first two elements of arr = %s"%(arr[:2])
# Create, start, and finish the child processes
p = Process(target=f, args=(arr,))
p.start()
p.join()
# Printing out the changed values
print "Now, the first two elements of arr = %s"%arr[:2]
Esto produce resultados como:
Originally, the first two elements of arr = [0.3518653236697369, 0.517794725524976]
Now, the first two elements of arr = [-0.3518653236697369, 0.517794725524976]
Se puede acceder a la matriz de una manera ctypes, por ejemplo, arr[i]
tiene sentido. Sin embargo, no es una matriz numerosa y no puedo realizar operaciones como -1*arr
, o arr.sum()
. Supongo que una solución sería convertir la matriz ctypes en una matriz numpy. Sin embargo (además de no poder hacer que esto funcione), no creo que se comparta más.
Parece que habría una solución estándar para lo que tiene que ser un problema común.
subprocess
lugar de multiprocessing
.