Pythonで並列処理をする方法

Python
Python
0

並列処理(マルチプロセッシング)は計算資源を効率良く使い、計算時間を大幅に短くしてくれる。
この記事ではPythonのmultiprocessingモジュールを使って、複数のコアで並列処理(マルチプロセッシング)する簡単な方法と、2種類以上の引数を指定する方法をメモする。

スポンサーリンク

基本

使い方の詳細はmultiprocessingモジュールの参照Webサイトに書かれている。

Poolというオブジェクトを使うと、並列処理は基本的には次のように使うことができる。

from multiprocessing import Pool

def func(x):
   return x**2

x = [1,2,3]

with Pool(5) as p:
   print(p.map(func, x))

Pool(5)でプロセス数を指定し、p.map(func, x)で並列する関数と引数を指定する。
この方法だと指定できる引数は1種類だけになるが、2種類以上の引数を渡すやりかたは次のセクションで紹介する。
ちなみに、上記コードは標準出力に次のように表示される。

[1,4,9]

Pool以外にもProcessというオブジェクトがあるが、この比較はこの記事ではしない。
詳しい比較はこちらの記事が参考になる。

スポンサーリンク

複数の引数を指定する場合

複数の引数を指定する場合は次のようにする。

from multiprocessing import Pool
import itertools

def func(x, y):
   return x*y

x = [1,2]
y = [1,2,3]
xy = list(itertools.product(x, y))
# xy = [(1, 1), (1, 2), (1, 3), (2, 1), (2, 2), (2, 3)]

with Pool(5) as p:
   print(p.starmap(func, xy))

異なるのは引数の指定の仕方と、starmapという関数を使うことの2つ。
引数は全ての組み合わせを得るために、itertoolsモジュールを使用している。
標準出力には次のように表示される。

[1, 2, 3, 2, 4, 6]

ちなみに全部で6通りの引数を指定し、プロセス数は5のままであるが、タスクが終わり次第次のタスクに移るため問題はない。
並列数を上げるためにプロセス数を増やしたほうが良いが、使用するマシンの性能で上限があるため注意が必要である。

スポンサーリンク
H-MEMO

コメント