multiprocessing numpy - Serbipunk/notes GitHub Wiki

https://stackoverflow.com/questions/48220845/sharing-and-editing-numpy-array-in-python-multiprocessing

from multiprocessing import Process, Array
import numpy as np

def main():
    im_arr = np.array([1,2,3],[4,6,7](/Serbipunk/notes/wiki/1,2,3],[4,6,7), dtype=np.uint8)       # 创建输入矩阵
    print('Array in main before process:\n',im_arr)

    shape = im_arr.shape        
    size = im_arr.size
    im_arr.shape = size       # 对输入矩阵进行改变
    arr = Array('B', im_arr)      # 封装成mp共享数据
    p = Process(target=fun, args=(arr,shape))
    p.start()
    p.join()

    arr = np.frombuffer(arr.get_obj(), dtype=np.uint8)    # 提取mp共享数据
    arr.shape = shape       # 还原shapeshape
    print('Array in main after process:\n',arr)
    
def fun(a, shape):
    a = np.frombuffer(a.get_obj(), dtype=np.uint8)
    a.shape = shape

    a[0][0] = 10
    a[...] = np.array([0,0,0],[0,0,0](/Serbipunk/notes/wiki/0,0,0],[0,0,0))
    a[0][0] = 5

    print('Array inside function:\n',a)
    a.shape = shape[0]*shape[1]


main()