Ich möchte ein Numpy-Array im gemeinsam genutzten Speicher zur Verwendung mit dem Multiprocessing-Modul verwenden. Die Schwierigkeit besteht darin, es wie ein Numpy-Array zu verwenden und nicht nur als ctypes-Array.
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]
Dies erzeugt eine Ausgabe wie:
Originally, the first two elements of arr = [0.3518653236697369, 0.517794725524976]
Now, the first two elements of arr = [-0.3518653236697369, 0.517794725524976]
Auf das Array kann auf ctypes Weise zugegriffen werden, z arr[i]
. B. macht es Sinn. Es ist jedoch kein Numpy-Array, und ich kann keine Operationen wie -1*arr
oder ausführen arr.sum()
. Ich nehme an, eine Lösung wäre, das ctypes-Array in ein numpy-Array umzuwandeln. Ich glaube jedoch nicht (dass ich nicht in der Lage bin, diese Arbeit zu machen), dass sie nicht mehr geteilt wird.
Es scheint eine Standardlösung für ein allgemeines Problem zu geben.
subprocess
eher nach als multiprocessing
.