Pythonのmultiprocessing.Pool.map
で複数引数を扱う方法
Python
のmultiprocessing
ライブラリを使って、並列処理を行う場合、複数の引数を渡す方法としてstarmap()
とpartial()
がよく使用されます。ここでは、それぞれの方法を解説します。
starmap()
を使う方法
starmap()
は、複数の引数をタプル形式で関数に渡すことができます。以下のようにzip()
やリストを使って引数をまとめ、各プロセスに分配します。
使用例
from multiprocessing import Pool
def func(a, b):
return a + b
if __name__ == '__main__':
with Pool(4) as pool:
results = pool.starmap(func, [(1, 2), (3, 4), (5, 6)])
print(results)
このコードは、2つの引数を持つfunc()
を並列に処理し、それぞれの結果を出力します。
partial()
を使う方法
functools.partial()
を使うことで、関数の一部の引数を固定しておき、残りの引数だけを並列処理に渡すことが可能です。
使用例
from multiprocessing import Pool
from functools import partial
def func(a, b):
return a + b
if __name__ == '__main__':
a_args = [1, 2, 3]
second_arg = 10
with Pool(4) as pool:
results = pool.map(partial(func, b=second_arg), a_args)
print(results)
このコードでは、b
の引数を固定し、a_args
の値とともに関数func
を並列に実行します。
まとめ
複数の引数を並列処理するには、starmap()
を使って引数のタプルを渡す方法が直感的で便利です。一方、partial()
を使うことで、一部の引数を固定した処理も柔軟に行うことができます。プロジェクトの要件に応じてこれらの方法を使い分けましょう。