Saya ingin menggunakan array numpy dalam memori bersama untuk digunakan dengan modul multiprocessing. Kesulitannya adalah menggunakannya seperti array numpy, dan bukan hanya sebagai array 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]
Ini menghasilkan keluaran seperti:
Originally, the first two elements of arr = [0.3518653236697369, 0.517794725524976]
Now, the first two elements of arr = [-0.3518653236697369, 0.517794725524976]
Array dapat diakses dengan cara ctypes, misalnya arr[i]
masuk akal. Namun, ini bukan array numpy, dan saya tidak dapat melakukan operasi seperti -1*arr
, atau arr.sum()
. Saya kira solusinya adalah mengubah array ctypes menjadi array numpy. Namun (selain tidak dapat membuat ini berfungsi), saya tidak percaya itu akan dibagikan lagi.
Sepertinya akan ada solusi standar untuk apa yang harus menjadi masalah bersama.
subprocess
daripada multiprocessing
.