はじめに #
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()