使用python多进程池创建函数

2024-04-28 03:59:50 发布

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

我有一个函数

def dist_to_center(ra_center,dec_center):
    # finding theta
    cos_ra = np.cos(ra_center-var1['ra'])
    cos_dec = np.cos(dec_center-var1['dec'])
    sin_dec = np.sin(dec_center)*np.sin(var1['dec'])

    theta = np.arccos((cos_ra*cos_dec)+sin_dec*(1-cos_ra))
    numerator = theta*comoving_dist
    denominator = 1+var1['zcosmo']

    # THE FINAL CALCULATED DISTANCE TO CENTRE
    dist_to_center = (numerator/denominator) 
    return dist_to_center

我想利用我的处理器,所以我使用multiprocess pool如下:

if __name__ == '__main__':
    pool = Pool(processes=6)
    pool.map(dist_to_center, ra_center, dec_center) #calling the function with it's inputs
    pool.close()
    pool.join()

代码似乎是正确的,并且正在工作,但是只有一个处理器正在运行,而不是我调用的6个处理器。我做错了什么?你知道吗


Tags: to函数distnpsincos处理器dec
1条回答
网友
1楼 · 发布于 2024-04-28 03:59:50

您正在将一对一维数组传递给池。您需要自己对数组进行切片,以使池了解如何高效地处理它们。例如:

def dist_to_center_mapper(arrays):
    return dist_to_center(arrays[0], arrays[1])

ra = np.split(ra_center, 6)
dec = np.split(dec_center, 6)
pool = Pool(processes=6)
pool.map(dist_to_center_mapper, zip(ra, dec)) 

我认为“mapper”函数是必需的,因为Pool.map()只接受一个iterable参数。因此,我们将两个数组切片列表压缩在一起,以便将它们一起分配给多个进程。请注意,如果需要,可以将数组拆分为多于进程数的部分,如果某些部分可能需要不同的时间等

相关问题 更多 >