Je voudrais utiliser un tableau numpy en mémoire partagée pour une utilisation avec le module multitraitement. La difficulté est de l'utiliser comme un tableau numpy, et pas seulement comme un tableau 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]
Cela produit une sortie telle que:
Originally, the first two elements of arr = [0.3518653236697369, 0.517794725524976]
Now, the first two elements of arr = [-0.3518653236697369, 0.517794725524976]
Le tableau peut être accédé de manière ctypes, par exemple a du arr[i]
sens. Cependant, ce n'est pas un tableau numpy et je ne peux pas effectuer d'opérations telles que -1*arr
, ou arr.sum()
. Je suppose qu'une solution serait de convertir le tableau ctypes en un tableau numpy. Cependant (en plus de ne pas pouvoir faire ce travail), je ne crois pas que ce serait plus partagé.
Il semble qu'il y aurait une solution standard à ce qui doit être un problème commun.
subprocess
plutôt que multiprocessing
.