Python multiprocessing入門
はじめに
pythonのmultiprocessingを使った並列処理を実装してみましょう。
単一プロセス
単一プロセスなので並列化していない状態です。実行すると処理に4秒程度かかると思います。
unit-process.pyCopied!!from multiprocessing import Process import time def f(): f1() f2() def f1(): print("f1 start") time.sleep(2) print("f1 end") def f2(): print("f2 start") time.sleep(2) print("f2 end") def main(): startTime = time.time() p1 = Process( target=f, ) p1.start() p1.join() endTime = time.time() print(f"処理時間:{endTime-startTime}秒") if __name__ == "__main__": main()
2プロセス
並列度2で並列化した状態です。実行すると処理に2秒程度かかると思います。関数f1、f2を並列に実行することができ、処理時間を半減できましたね。
two-process.pyCopied!!from multiprocessing import Process import time def f1(): print("f1 start") time.sleep(2) print("f1 end") def f2(): print("f2 start") time.sleep(2) print("f2 end") def main(): ps = [ Process( target=f1, ), Process( target=f2, ), ] startTime = time.time() for p in ps: p.start() for p in ps: p.join() endTime = time.time() print(f"処理時間:{endTime-startTime}秒") if __name__ == "__main__": main()
おわりに
並列処理をすることでプログラムの実行時間を短くすることができました。
- ハードウェアのCPUコア数と並列度の限界がどの程度のものなのか
とかはまだまだ気になる所ですね。また別の場で検証してみたいと思います。