다중 처리 모듈과 함께 사용하기 위해 공유 메모리에서 numpy 배열을 사용하고 싶습니다. 어려운 점은 ctypes 배열이 아니라 numpy 배열처럼 사용하는 것입니다.
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]
다음과 같은 출력이 생성됩니다.
Originally, the first two elements of arr = [0.3518653236697369, 0.517794725524976]
Now, the first two elements of arr = [-0.3518653236697369, 0.517794725524976]
배열은 ctypes 방식으로 액세스 할 수 있습니다 arr[i]
. 그러나 numpy 배열이 아니며 -1*arr
, 또는 arr.sum()
. 해결책은 ctypes 배열을 numpy 배열로 변환하는 것입니다. 그러나 (이 작업을 할 수 없다는 것 외에도) 더 이상 공유 될 것이라고 생각하지 않습니다.
일반적인 문제에 대한 표준 솔루션이있는 것 같습니다.
subprocess
아니라 에 대해 묻는 것 multiprocessing
입니다.