我正在尝试使用Python多处理。我将语句包装在一个函数中,然后使用多处理映射来遍历该函数。我发现只有第一个迭代才真正被处理,而其余的则没有(我通过打印结果进行检查)。
这是我的问题:
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]]]),
答案 0 :(得分:1)
您的代码可以正常工作。您有5个处理器(foo Bar.
)和5个要做的事情(Pool(5)
),因此每个任务都由每个处理器执行。由于注释中提到了@Michael Butscher的原因,因此未共享每次计算。
您可以通过下面的np.arange(5)
操作(一种直观的方式)对结果进行解析;
Pool