我以这种方式使用池在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
目前没有回答
相关问题 更多 >
编程相关推荐