問題タブ [keyboardinterrupt]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
mpi - mpirun のカスタム割り込みハンドラ
どうやら、mpirun
生成された各プロセスに SIGINT シグナルを「転送」する SIGINT ハンドラーを使用します。
これは、mpi 対応コードの割り込みハンドラーを記述して実行するmpirun -np 3 my-mpi-enabled-executable
と、3 つのプロセスのそれぞれに対して SIGINT が発生することを意味します。その直後、mpirun は終了します。これは、エラー メッセージを出力して終了するだけの小さなカスタム ハンドラーがある場合にうまく機能します。ただし、カスタム割り込みハンドラーが重要なジョブを実行している場合 (たとえば、重大な計算を実行したり、データを永続化したりする場合)、ハンドラーは最後まで実行されません。これは、mpirun があまりにも早く終了することを決定したためだと思います。
ctrl-c
これは、実行後に押す(つまり、SIGINTを引き起こす)ときのstderrmy-mpi-enabled-executable
です。これは、期待される望ましい動作です。
ctrl-c
実行後に押したときのstderrは次のとおりmpirun -np 1 my-mpi-enabled-executable
です。これは問題のある動作です:
次の質問のいずれかに答えると、問題が解決します。
- mpirun SIGINT ハンドラをオーバーライドする方法 (可能な場合)?
- mpirun が終了した直後に生成された mpirun プロセスの終了を回避するにはどうすればよいですか?
- mpirun が終了する前に、mpirun が子プロセスに送信している別のシグナルはありますか?
- いわゆる「シグナル 0 (未知のシグナル 0)」を「キャプチャ」する方法はありますか (上記の 2 番目の stderr を参照)。
Linuxでopenmpi-1.6.3を実行しています。
python - ボタンリリースをキーボード割り込み tkinter として扱う
Python 3 で tkinter を使用してプログラムを作成していますが、スタックしています...ボタンを押すとトリガーされる無限ループがあります。
button13 のリリース時に task13 を終了するにはどうすればよいですか? 「キーボード割り込み」コードはありますか、それともループを変更できますか?
python - Python クリーン キーボード割り込み
ラズベリーパイで入力を待つためにスレッドを使用しているpythonスクリプトがあります。これまでにスレッドを使用したのはこれが初めてで、KeyboardInterrupt の処理に問題があります。それは実際には問題ではありませんが、ユーザーがプログラムの開始直後のように早い段階で control-c を押すと、Python がびっくりして、インポート エラーでいっぱいのコンソールを吐き出します。インポートを try -excepts でラップしようとしましたが、うまくいかないようです。これまでこの問題が発生したことがないので、スレッドに何か問題があると感じています。
すべてをtry-exceptsでラップすることに加えて、私も試しました:
ロードされるまでキーボードの割り込みを許可しないと思われていましたか?
とにかくキーボード割り込みでpythonに何もさせないようにすることはありますか?
どんな助けでも大歓迎です。ありがとう!
私のコード:
python - Python - KeyboardInterrupt でメインスレッドを強制終了できない
シンプルなマルチスレッド ポート スキャナーを作成しています。ホスト上のすべてのポートをスキャンし、開いているポートを返します。問題はスキャンを中断することです。スキャンが完了するまでにかなりの時間がかかり、スキャンの途中で Cc を使用してプログラムを強制終了したい場合があります。問題は、スキャンが停止しないことです。メイン スレッドは queue.join() でロックされ、キューからのすべてのデータが処理されるまで KeyboardInterrupt を認識しないため、メイン スレッドのブロックが解除され、プログラムが正常に終了します。私のすべてのスレッドはデーモン化されているため、メインスレッドが終了すると、彼と一緒に終了する必要があります。
シグナル lib を使用してみましたが、成功しませんでした。threading.Thread クラスのオーバーライドと正常な終了のためのメソッドの追加が機能しませんでした... queue.join() の実行中にメイン スレッドが KeyboardInterrupt を受信しません。
編集:
time モジュールを使用して解決策を見つけました。
python - Python メインスレッドの中断
Python で interrupt_main() メソッドがどのように機能するかを説明できる人はいますか?
私はこのPythonコードを持っています:
そして、実行しようとすると、次の出力が得られます。
ただし、プログラムを手動で中断すると (CTRL-C)、スレッドは正しく中断されます。
最初の例で、スレッドの中断が 10 秒 (5 秒ではなく) 後にのみ発生するのはなぜですか?
古いスレッド n Python メーリング リストを見つけましたが、ほとんど何も説明していません。
python - Python 2.7: 子スレッドが KeyboardInterrupt をキャッチしない
上記のコードを実行すると、Ctrl-C を押すと、finally 句から出力した後にメイン スレッドが終了します。現在、子スレッドは非デーモンであるため、まだ try: except KeyboardInterrupt ブロックで実行されています。ただし、この子スレッドは、KeyboardInterrupt 例外をキャッチすることになっているにもかかわらず、Ctrl-C に応答していないようです。なんで?