以下のような Python コードがあります。
import sys
import signal
import atexit
def release():
print "Release resources..."
def sigHandler(signo, frame):
release()
sys.exit(0)
if __name__ == "__main__":
signal.signal(signal.SIGTERM, sigHandler)
atexit.register(release)
while True:
pass
実際のコードはこのスニペットよりもはるかに複雑ですが、構造は同じです。つまり、メイン関数は無限ループを維持します。
DB ハンドルなど、占有されているリソースを解放するには、シグナル コールバックが必要です。SIGTERM
次に、サーバーが強制終了された場合に備えて、リリース関数を呼び出してプロセスを終了するだけのハンドラーを追加します。1atexit
つは、プロセスを正常に処理することを目的としています。
release
今、プロセスが強制終了されたときに一度だけ呼び出されたいという問題があります。私のコードに改善はありますか?