はじめに
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を押されると、叫びます。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import signal | |
import sys | |
def handler(signal, frame): | |
print('うおおお、やられたーー') | |
sys.exit(0) | |
signal.signal(signal.SIGINT, handler) | |
while(True): | |
pass |
0 件のコメント :
コメントを投稿