Helve’s Python memo

Pythonを使った機械学習やデータ分析の備忘録

<multiprocessing> 並列計算

Pythonの標準ライブラリmultiprocessingを使って、並列計算を行う。

目次

環境

python 3.6.2

各並列処理間でデータを共有せず並列計算を行う場合

並列化した各処理間でデータを共有せず、並列計算を行う場合、
multiprocessingのPoolモジュールを使うだけで良い。
次のプログラムでは、0から9までの各整数の2乗を計算する。

import multiprocessing as mp

def square(x):
    return x*x
    
if __name__ == "__main__":
    with mp.Pool(processes=2) as pool:
        result = pool.map(square, range(10))
    print(result)


実行結果:

[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]


main関数は、

if __name__ == "__main__":

で始める必要がある。
Poolの引数は、使用するワーカープロセスの数(並列計算プロセス数)である。
作成したPoolオブジェクトpoolのmapメソッドに対し、
第1引数に関数、第2引数に関数の引数(イテレータ形式)を渡す。

また、計算終了後にPoolオブジェクトを消去する必要がある。
with構文を使わない場合、以下のようにcloseメソッドを使う。

pool = mp.Pool(processes=2)
result = pool.map(square, range(10)))
pool.close()


参考:
17.2. multiprocessing — プロセスベースの並列処理 — Python 3.6.1 ドキュメント