Çoklu işlem modülü ile kullanmak için paylaşılan bellekte bir numpy dizisi kullanmak istiyorum. Zorluk, onu sadece bir ctypes dizisi olarak değil, bir numpy dizisi gibi kullanmaktır.
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]
Bu, aşağıdaki gibi çıktılar üretir:
Originally, the first two elements of arr = [0.3518653236697369, 0.517794725524976]
Now, the first two elements of arr = [-0.3518653236697369, 0.517794725524976]
Diziye ctypes tarzında erişilebilir, örneğin arr[i]
mantıklı. Ancak, bu uyuşuk bir dizi değil ve -1*arr
, veya gibi işlemleri gerçekleştiremiyorum arr.sum()
. Sanırım bir çözüm, ctypes dizisini uyuşmuş bir diziye dönüştürmek olacaktır. Ancak (bu işi yapamamanın yanı sıra) artık paylaşılacağına inanmıyorum.
Ortak bir problem olması gereken şeyin standart bir çözümü varmış gibi görünüyor.
subprocess
yerine soruyor multiprocessing
.