Python中对for循环的多处理在一段时间后停止,程序继续使用单个线程运行

2024-09-27 21:30:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我以这种方式使用池在Python中对for循环进行多处理:

if __name__ == '__main__':
    pool = Pool()   # Create a multiprocessing Pool
    result = pool.map(process_interp, range(ngal))

其中process_interp是我定义的一个函数。然而,当计算数量增加时,程序似乎几乎崩溃,结果生成了一个0字节的文件,Python程序继续运行,但htop显示它不再使用多个线程,只使用了一个线程。对于不太繁重的计算,一切正常,程序运行快速正确

有人能告诉我这里发生了什么,是什么导致了这个问题吗?我不知道如何解决这个问题。非常感谢

编辑:这是函数过程。基本上是计算网格上的一些值。当我增加网格的大小(N_a和N_m)以及计算的数量时,问题就会出现

def process_interp(k):
    #e = data[k][0]+np.random.normal(0, 0.3, len(data[k][0]))
    e = data[k][0]
    sigma_crit = data[k][1]
    r_s = data[k][2]
    dev_gamma = data[k][4]
    dev_k = data[k][5]
    z_d = data[k][6]
    like_grid = np.empty((N_a, N_m), dtype='longdouble')
    for i in range(N_a):
        for j in range(N_m):
            gamma_nfw, k_nfw = NFWfunc(m_grid[j], z_d, r_s, sigma_crit)
            gamma_dev = dev_gamma*pow(10, alpha_grid[i]-alpha_0)
            k_dev = dev_k*pow(10, alpha_grid[i]-alpha_0)
            mean = (gamma_nfw+gamma_dev)/(1-k_nfw-k_dev)     
            loglike = np.zeros(len(e), dtype='longdouble')
            loglike = -((mean-e)**2/(2*0.3**2))
            like_grid[i,j] = np.prod(np.exp(loglike))
    return like_grid

Tags: devalphafordatanprangeprocessgrid

热门问题