バタイユゲーム支援ツール強化版をmultiprocessingを使って高速化できないか検討してみた。
結論から言うと難しい。
後の為に、試した事を以下にメモしておく。
1.基本的な考え方
前回の高速化検討で使ったテスト用EXCELシートを名前を変えて2つ使う。
pythonプログラムから2つのEXCELシートをmultiprocessingを使って動かす。
但し、各々のEXCELシートの処理回数は半分にする。
→前回の12回の処理を6回ずつ分けて行う。
2.pythonプログラム
下図のようにして計測すると1.553秒となる。
単純に12回処理した場合の0.416秒よりも1秒以上も遅くなる。
なお、Windows+JupyterLabではmultiprocessingがそのまま動かないので(4項を参照)、
下図の処理をpythonファイル(func_mp3,py)で登録しておいて、JupterLabでは
上図のように呼び出す必要がある。
3.参考資料
下記のWEBページにお世話になりました。ありがとうございます。
・Pythonのthreadingとmultiprocessingを完全理解
・【python】Jupyter-notebook + pandas + multiprocessing(Pool)を動かす方法
4.その他
multiprocessingがそのまま動かない例。
JupyterLabで下記の処理を動かしてもrdicexの処理がスルーされる。
<個人的な感想>
multiprocessingはthreadingよりもオーバーヘッドが大きいとの事であるが、
処理時間が予想以上に長くなるので見送る事にする。
メモリが独立しているので排他制御を考えなくてもよいはずが、結果の中に
Noneが含まれており何か不具合がありそうである。
色々な検討をしたが、結局は単純に処理したほうが早いと判断する。
12ケ程度の繰り返し処理は面倒な方法を取ると逆効果になると思う。