在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。