4

以下のような 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今、プロセスが強制終了されたときに一度だけ呼び出されたいという問題があります。私のコードに改善はありますか?

4

1 に答える 1