不能将池(多处理)与调用其他函数的函数一起使用?

时间:2019-06-18 18:57:21

标签: python multiprocessing

我在pool.map中使用了两个不同的代码,其中第一个称为Runge-Kutta(术语)积分器

@jit
def rk4(R,U,W):
    #timestep h=2.0
    X0,Z0=R[0],R[1]
    traj = []
    for n in range(10):
        traj.append([X0,Z0])

        #...integration scheme 1...

    return traj

这对于pool.map可以正常工作。

第二个使用了Adams-Bashfoth-Moulton PC方案(更不相关的行话):

@jit
def ab4(I,L,U,W):
    #timestep h=2.0
    traj=[]  
    #... ini stuff ...

    for j in range(t0+1,int(0.5*len(U))):

        #...integration scheme 2 ...

        if X>L:
            break
    return traj

由于第二个要求使用第一个进行简短的初始化,因此我编写了一个父函数,该函数依次调用它们:

def integrator(R,L,U,W):
    init=rk4(R,U,W)
    rest=ab4(init,L,U,W)

    return np.asarray(init+rest)

这不适用于pool.map并返回类似“ Ca n't get attribute integrator ....”的信息。

由于存在许多固定参数,因此我会通过以下方式局部调用pool.map:

with Pool(10) as p:
    results=p.map(partial(integrator, L=dX*nx,U_xz,W_xz), G_0)

所以我的问题是,如何获得第二个调用其他函数的代码以使其在Pool中正常工作?

0 个答案:

没有答案