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)
メソッドは、入力として提供された function
を iterable
の各項目に適用するイテレーターを返します。それでも、各入力項目 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