Python で複数の引数を持つ Pool Map

Muhammad Waiz Khan 2023年1月30日
  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]

入力関数に複数の引数がある場合は、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) メソッドは、入力として提供された functioniterable の各項目に適用するイテレーターを返します。それでも、各入力項目 iterable は入力 function 引数 iterables として配置されることを想定しています。

pool.starmap() メソッドを使用することにより、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

関連記事 - Python Multiprocessing