はじめに #
Pythonの標準ライブラリmultiprocessingを使って並列計算を行う。
環境 #
ソフトウェア | バージョン |
---|---|
python | 3.7.4 |
各並列処理間でデータを共有せず並列計算を行う場合 #
並列化した各処理間でデータを共有せずに並列計算を行う場合、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]
上記のプログラムを開設する。Pool
クラスは
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()