Python中multiprocessing.Pool運行帶多個參數的函數


在python中經常會到用多線程處理某個函數來縮短運行時間,但通常multiprocessing.Pool的map函數只接受一個可迭代參數。

from multiprocessing import Pool

def work(x):
    return x+1
pool = Pool(processes=4) # 4個線程
x = [1,2,3,4,5,6]
results = pool.map(work, x)
print results

運行上面的程序就會多線程處理並打印出輸入x的計算結果。

但是這個函數僅允許函數的輸入變量為1,如果函數需要多個參數輸入,那個就無法用上面的程序。比如:

def work(x, y):
    return x + y

當附加參數y為固定參數時,一種比較有效的方法是,用partial函數提取主要的一個參數固定其他參數。

比如,我們想用x去加一個固定值,那么我們就認為x是主要參數,固定y:

from functools import partial

partial_work = partial(work, y=1) # 提取x作為partial函數的輸入變量
results = pool.map(partial_work, x)

 

總結:當函數的參數在不同時候的輸入均不同,那么這種方法不太合適,可參考 https://www.cnblogs.com/arkenstone/p/6830714.html 的方法2和方法3。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM