はじめに
PythonでDeep Learning回してて、Ctrl-Cでプログラムを終了させる際、押したらモデル保存してくれる様にしたかったので調べました。解決策
Ctrl-C押して、送信されたSIGINTシグナルを掴めるイベントハンドラを作成します。signal.signal(signal.SIGINT, handler)のように、handler関数を、SIGINTシグナルが来た際のイベントハンドラとして登録します。
そして、handler関数の中にやりたい処理を書けば、Ctrl-Cを押した際に実行されます。
Chainerなら
chainer.serializers.save_npz(なんちゃらと書いて於けばモデルを保存してくれます。
注意点としては、みんな大好きkillコマンドを使用する際は、指定をしなければSIGINTシグナルではなくSIGTERMシグナルなので、間違えないでくださいね。
参考: http://equj65.net/tech/linuxprocessgroup/
実装
ソースは以下の様になります。
whileループ中でCtrl-Cを押されると、叫びます。
0 件のコメント:
コメントを投稿