JavaScriptを有効にしてください

Pythonのmultiprocessingを使った並列計算

 ·   1 min read

はじめに

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

環境

ソフトウェア バージョン
python 3.7.4

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

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

1
2
3
4
5
6
7
8
9
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)

実行結果:

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

上記のプログラムを開設する。Poolクラスは

1
if __name__ == "__main__":

の中で始める必要がある。

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

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

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

参考

multiprocessing — プロセスベースの並列処理 — Python 3.9.1 ドキュメント

シェアする

Helve
WRITTEN BY
Helve
関西在住、電機メーカ勤務のエンジニア。Twitterで新着記事を配信中です