Je voudrais utiliser un tableau numpy en mémoire partagée pour l'utiliser avec le module multiprocesseur. 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 des résultats tels 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 ctypique, par ex. arr[i]
a un sens. Cependant, il ne s'agit pas d'un tableau numpy, et je ne peux pas effectuer des 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 être capable de faire fonctionner cette solution), je ne pense pas qu'elle serait partagée.
Il semble qu'il y aurait une solution standard à ce qui doit être un problème commun.
1 votes
Ce n'est pas le même que celui-là ? stackoverflow.com/questions/5033799/
1 votes
Ce n'est pas tout à fait la même question. La question liée porte sur
subprocess
plutôt quemultiprocessing
.