タイムアウトを設定してJoblibで並列処理を実行
pythonで並列処理をするときにはjoblibが手軽で便利だが、タイムアウト時の処理に自由度がない。
というのも、joblib.Parallel
の引数にtimeout
を設定すると、指定した時間を超えたときに例外を投げて計算全体を止めてくれるが、タイムアウトした処理を無視して計算を継続するようなことはしてくれない。
pythonで自作関数にタイムアウトを設定するパッケージだとtimeout-decoratorが有名だが、multithreadingにも対応しているようだ。
なのでjoblib.Parallel
のbackendをthreadingにすれば並列処理でtimeout-decoratorを使うことができる。
joblib.Parallel
のbackendをデフォルトからmultithreading にすると(GILのせいで)計算時間が伸びることが多いけど、タイムアウトの処理ができずに永遠に計算が終わらないよりはマシだということにしておこう。
gist.github.com