PythonでCtrl-C押した際の処理を書ける様にする

はじめに

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 件のコメント :

コメントを投稿