Tôi muốn sử dụng một mảng numpy trong bộ nhớ dùng chung để sử dụng với mô-đun đa xử lý. Khó khăn là sử dụng nó như một mảng numpy, và không chỉ như một mảng 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]
Điều này tạo ra đầu ra như:
Originally, the first two elements of arr = [0.3518653236697369, 0.517794725524976]
Now, the first two elements of arr = [-0.3518653236697369, 0.517794725524976]
Mảng có thể được truy cập theo cách ctypes, ví dụ như hợp arr[i]
lý. Tuy nhiên, nó không phải là một mảng phức tạp và tôi không thể thực hiện các phép toán như -1*arr
, hoặc arr.sum()
. Tôi cho rằng một giải pháp sẽ là chuyển đổi mảng ctypes thành một mảng numpy. Tuy nhiên (ngoài việc không thể thực hiện điều này), tôi không tin rằng nó sẽ được chia sẻ nữa.
Có vẻ như sẽ có một giải pháp tiêu chuẩn cho những gì phải là một vấn đề chung.
subprocess
hơn là multiprocessing
.