我試圖將關鍵字參數傳遞給Python的multiprocessing.Pool
實例中的map
函數。使用帶有關鍵字參數的multiprocessing.Pool.map()函數?
從Using map() function with keyword arguments推斷,我知道我可以使用functools.partial()
如下列:
from multiprocessing import Pool
from functools import partial
import sys
# Function to multiprocess
def func(a, b, c, d):
print(a * (b + 2 * c - d))
sys.stdout.flush()
if __name__ == '__main__':
p = Pool(2)
# Now, I try to call func(a, b, c, d) for 10 different a values,
# but the same b, c, d values passed in as keyword arguments
a_iter = range(10)
kwargs = {'b': 1, 'c': 2, 'd': 3}
mapfunc = partial(func, **kwargs)
p.map(mapfunc, a_iter)
輸出是正確的:
0
2
4
6
8
10
12
14
16
18
這是最好的做法(最 「Python的」 方式)這樣做?我覺得:
1)Pool
是常用的;
2)關鍵字參數是常用的;
3)但是,像我上面的例子一樣的組合使用有點像一個「哈克」的方式來實現這一點。
對我來說似乎很好。 map只需要位置參數,所以使用partial來創建合適的函數對象是非常合理的。 – nneonneo