Python 中具有多個引數的 pool map

Muhammad Waiz Khan 2023年1月30日 2022年5月17日
  1. 使用 pool.map() 方法執行並行函式
  2. 使用 pool.starmap() 方法執行具有多個引數的並行函式
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