Chciałbym użyć tablicy numpy w pamięci współdzielonej do użytku z modułem wieloprocesorowym. Trudność polega na używaniu go jako tablicy numpy, a nie tylko jako tablicy 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]
Daje to wyniki takie jak:
Originally, the first two elements of arr = [0.3518653236697369, 0.517794725524976]
Now, the first two elements of arr = [-0.3518653236697369, 0.517794725524976]
Dostęp do tablicy można uzyskać w sposób ctypes, np arr[i]
. to sens. Jednak nie jest to tablica numpy i nie mogę wykonywać takich operacji, jak -1*arr
, lub arr.sum()
. Przypuszczam, że rozwiązaniem byłoby przekonwertowanie tablicy ctypes na tablicę numpy. Jednak (poza tym, że nie mogę tego zrobić), nie sądzę, aby był on już udostępniany.
Wydaje się, że byłoby standardowe rozwiązanie tego, co musi być powszechnym problemem.
subprocess
raczej niż multiprocessing
.