python多进程多维数组数据传递example

import multiprocessing as mp
import numpy as np
def worker(size, idx, arr):
    array = np.zeros((size,size,size))
    print(idx)
    array[idx[0],idx[1],idx[2]] = 100
    for slice in range(size):
        for row in range(size):            
            arr[slice*size*size+row*size:slice*size*size+row*size+size] = array[slice, row, :]  
 

 
if __name__=='__main__':
    size = 3
    myArray_list = []
    for i in range(9):
        myArray_list.append(mp.Array('f', size*size*size))
    ps = [mp.Process(target=worker, args=(size, [x%3,x%3,x%3], myArray_list[x])) for x in range(9)]
    for p in ps:
        p.start()
    for p in ps:
        p.join()
 
    for x in range(9):
        print(x)
        res = np.array(myArray_list[x])
        res1 = res.reshape((size,size,size)) 
        print(res1)
        print(res1[1,2,0])
        
    print('after all workers finished')

多进程数据同步不能用global,因为不能跨进程存取,必须要用Multiprocessing的queue, Value, Array, Rawarray来做数值传递。

而且这个传递不支持多维数组,只支持一维的,所以前后要自己转换一下。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值