簡體   English   中英

使用python多進程池功能

[英]Using python multiprocess pool to a function

我有一個功能

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個處理器。 我在這里做錯了什么?

您正在將一對一維數組傳遞給Pool。 您需要自己對數組進行切片,以使Pool知道如何有效地處理它們。 例如:

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)) 

我認為“映射器”功能是必需的,因為Pool.map()僅接受單個可迭代的參數。 因此,我們將數組切片的兩個列表壓縮在一起,以便將它們一起分發給多個進程。 請注意,如果需要,您可以將陣列拆分成比進程數更多的碎片,如果某些碎片可能花費不同的時間等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM