首页 > 解决方案 > 无法获得 Python 多处理数组输出的完整副本

问题描述

我编写了简单的 Python 多处理来测试它是如何工作的: 多处理仅适用于第一次迭代。我将一些数组包装在一个函数中,然后我调用多处理映射以使用 5 个处理器对其进行处理。除了每个数组的 5 个副本的输出之外,所有这些都很好。关于如何返回每个数组的一个实例而不是五个实例的任何想法。我想知道是否有一种通用的方法可以使进程相互通信。


import numpy as np
import multiprocessing as mp

B=np.full((5,4,4),np.nan)
C=np.full((5,4,4),np.nan)
D=np.full((5,4,4),np.nan)


def job1(i):
    print(i)
    A=np.ones((4,4))
    B[i,:,:]=A+1
    C[i,:,:]=2*A+2
    D[i,:,:]=A+5
    return B,C,D
#%%

P=mp.Pool(5)
result=P.map(job1,np.arange(5))
P.close()
P.join()



result[0] 
(array([[[ 2.,  2.,  2.,  2.],
         [ 2.,  2.,  2.,  2.],
         [ 2.,  2.,  2.,  2.],
         [ 2.,  2.,  2.,  2.]],

        [[nan, nan, nan, nan],
         [nan, nan, nan, nan],
         [nan, nan, nan, nan],
         [nan, nan, nan, nan]],

        [[nan, nan, nan, nan],
         [nan, nan, nan, nan],
         [nan, nan, nan, nan],
         [nan, nan, nan, nan]],

        [[nan, nan, nan, nan],
         [nan, nan, nan, nan],
         [nan, nan, nan, nan],
         [nan, nan, nan, nan]],

        [[nan, nan, nan, nan],
         [nan, nan, nan, nan],
         [nan, nan, nan, nan],
         [nan, nan, nan, nan]]]),

标签: pythonpython-3.xnumpypython-multiprocessingpython-multithreading

解决方案


推荐阅读