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を押されると、叫びます。
import signal
import sys
def handler(signal, frame):
print('うおおお、やられたーー')
sys.exit(0)
signal.signal(signal.SIGINT, handler)
while(True):
pass

0 件のコメント :

コメントを投稿