Pythonでの並列処理について勉強したのでまとめ
軽い処理では並列にしない方が高速でしたが、
重たい処理は並列処理によって高速化できることを確認しました。
multiprocessing
Pythonでは標準ライブラリのmultiprocessingを用いて並列処理が可能です。
from multiprocessing import Pool def func(x): return x*x if __name__ == "__main__": pool = Pool(4) # 並列化する数 pool.map(func, range(10)) # range(10)の各要素についてfunc関数の処理を並列に実行
コア数の確認は以下で可能です。
import multiprocessing print multiprocessing.cpu_count()
速度の比較
次の2つの関数について、普通に実行する場合とmultiprocessingを用いて実行する場合とで処理時間を計測します。
# 軽い処理 def func1(x): return x*x # 重い処理 def func2(x): for i in range(x): for j in range(i): pass if __name__ == "mian": map(func, range(1000)) # 普通にmap pool = Pool(4) pool.map(func, range(1000)) # multiprocessing
| func1 | finc2 | |
|---|---|---|
| 普通にmap | 0.000185012817383 | 4.20705986023 |
| multiprocessing | 0.0154550075531 | 1.90538191795 |
軽い処理ではmultiprocessingによって性能が落ちていますが、重い処理に対してはmultiprocessingの効果で処理速度が速くなっていることが確認できます。