Python 中具有多個引數的 pool map
本文將解釋使用 Python 中的 multiprocessing
模組執行並行函式執行的不同方法。
multiprocessing
模組提供了使用多個輸入執行並行函式執行並在不同程序之間分配輸入資料的功能。
我們可以通過在 Python 中使用以下方法來並行執行具有不同輸入值的函式。
使用 pool.map()
方法執行並行函式
pool.map(function, iterable)
方法返回一個迭代器,它將作為輸入提供的 function
應用於輸入 iterable
的每個專案。因此,如果我們想用不同的輸入並行執行函式
,我們可以使用 pool.map()
方法。
下面的示例程式碼演示瞭如何使用 pool.map()
方法來並行化 Python 中的函式執行。
from multiprocessing import Pool
def myfunc(x):
return 5 + x
if __name__ == '__main__':
with Pool(3) as p:
print(p.map(myfunc, [1, 2, 3]))
輸出:
[6, 7, 8]
如果輸入 function
有多個引數,我們可以使用 pool.map()
方法和 partial()
函式並行執行該函式。
下面的示例演示瞭如何使用 Python 中的 pool.map()
使用多個引數並行執行函式。
from multiprocessing import Pool
from functools import partial
def multiply(x, y):
print(x*y)
if __name__ == '__main__':
with Pool(3) as p:
p.map(partial(multiply, 5), [1, 2, 3])
輸出:
5
10
15
從上面的例子可以看出,這種方法的缺點是我們不能改變第一個引數的值。
使用 pool.starmap()
方法執行具有多個引數的並行函式
如果我們想用多個引數並行執行一個函式,我們可以使用 pool.starmap(function, iterable)
方法。
與 pool.map(function, iterable)
方法一樣,pool.starmap(function, iterable)
方法返回一個迭代器,它將作為輸入提供的 function
應用到 iterable
的每個專案。儘管如此,它還是希望每個輸入項 iterable
被安排為輸入 function
引數 iterables。
通過使用 pool.starmap()
方法,我們可以為 function
的所有引數提供不同的值,這與 pool.map()
方法不同。
我們可以通過以下方式使用 pool.starmap()
方法在 Python 中使用多個引數執行並行函式執行。
from multiprocessing import Pool
def print_name(name, lname):
print('full name =', name, lname)
if __name__ == '__main__':
with Pool(3) as p:
p.starmap(print_name, [('Thomas', 'Scott'), ('Ali', 'Khan')])
輸出:
full name = Thomas Scott
full name = Ali Khan