ホームページ  >  記事  >  バックエンド開発  >  Python3でCtrl+C終了信号をキャプチャする方法

Python3でCtrl+C終了信号をキャプチャする方法

WBOY
WBOY転載
2023-05-21 13:46:321805ブラウズ

技術的背景

サーバー バックエンドや科学計算プログラムなど、長時間実行される Python プログラムには特別な注意が必要です。 Ctrl C を使用して実行中のプログラムを終了するなど、特定の操作を実行するときは、早期に終了する必要がある場合があります。通常、この状況には 2 つの可能性が考えられます。1 つは、プログラムにエラーがあり、調整のためにプログラムを停止する必要があることです。もう 1 つは、プログラム自体は正しいが、プログラムの実行が遅すぎるか、早く終了したい場合です。このシナリオでは、多くの場合、対応する計算結果を保持したいと考えます。ただし、データの保存にサードパーティのデータ ストレージ形式を使用する場合は、継続的なストレージをサポートしていない可能性があり、プログラムの実行完了後に結果を保存するのが一般的です。プログラムが途中で終了した場合、結果を保存するには特別な手段が必要です。

基本的なケース

まず、比較的単純なケースを見てみましょう: 数字を出力する通常のプログラムです。1 秒ごとに数字を出力します。Python のシグナルを使用して、この終了シグナルをキャプチャできます。 。

# signal_exit.py
import signal
import sys
 
def signal_handler(signal, frame):
    print ('\nSignal Catched! You have just type Ctrl+C!')
    sys.exit(0)
 
if __name__ == '__main__':
    import time
 
    signal.signal(signal.SIGINT, signal_handler)
    for x in range(100):
        time.sleep(1)
        print (x)

このプログラムを途中で実行し、同時に Ctrl C を押すと、次の結果が得られます:

$ python3 signal_exit.py
0
1
2
^C
信号をキャッチしました! Ctrl C を入力するだけです!

この結果は、プログラムの実行中に Ctrl C の外部操作をキャプチャしたことを示しています。操作がそれに応じて処理された後でのみ、プログラムは終了します。なお、このときsys.exit(0)の終了操作を追加しないと、プログラムは停止せずに実行を継続するため、異常終了信号をキャッチしても何も処理をしないのと同じことになります。

外部パラメータを終了信号に渡す

上記の例では、「動作の終了」という外部信号だけをキャプチャしましたが、さらに進めると、それを外部パラメータにキャプチャしたいとします。このときの出力番号と操作方法を教えてください。 signal.signal 関数自体は多くのパラメーターの受け渡しをサポートしていないため、対応する内部パラメーターを取得できるように、独自にクラスを作成し、signal_handler 関数をクラスのメンバー関数としてカプセル化することをお勧めします。例: 次のような場合:

# signal_exit.py
import signal
import sys
import time
 
class Printer:
    def __init__(self):
        self.x = 0
        signal.signal(signal.SIGINT, self.signal_handler)
 
    def signal_handler(self, signal, frame):
        print ('\nSignal Catched! You have just type Ctrl+C! The last number is: {}'.format(self.x))
        sys.exit(0)
 
    def run(self, counter=10):
        while self.x < counter:
            print (self.x)
            time.sleep(1)
            self.x += 1
 
if __name__ == &#39;__main__&#39;:
    printer = Printer()
    printer.run(counter=100)

このとき、プログラムの実行中に Ctrl C を同時に押すと、結果は次のようになります:

#$ python3 signal_exit.py

0
1
2
3
^C
シグナルをキャッチしました! Ctrl C を入力するだけです! 最後の数字は: 3

ご覧のとおり、成功しました。最後の出力パラメータがキャプチャされました。

以上がPython3でCtrl+C終了信号をキャプチャする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。