0

Pythonのデーモンスレッドから、ブロッキングコードを実行しているメインスレッドで、どのように例外をトリガーしますか?

現在のプロセスを終了する必要があることを示すレコードをデータベースで定期的にチェックするデーモンスレッドがあります(つまり、ユーザーが[キャンセル]ボタンを押した)。私のメインの非デーモンスレッドでは、正常に終了するように簡単に変更できない外部プロセスへのブロッキング呼び出しを実行しています。ただし、手動でトリガーすると、メインスレッドは通常のKeyboardInterruptを適切に処理できます。

したがって、デーモンスレッドが終了コマンドを受信した場合、メインスレッドで例外を発生させてプロセスを終了するにはどうすればよいですか?

4

3 に答える 3

1

スレッドのドキュメントを調べた後、私はついに解決策がinterrupt_main()であることがわかりました。

于 2012-05-16T00:54:57.357 に答える
0

サブプロセスのリターンコードは、returncode属性を使用して取得できます。ゼロと違う場合は何かを上げます。

編集:サブプロセスモジュールとマルチプロセッシングモジュールを混同しました。ただし、マルチプロセッシングモジュールには、サブプロセスのリターンコード属性に類似しているように見える終了コード属性があります。

于 2012-05-15T17:10:38.520 に答える
0

これは通常、メッセージキューを使用して行われます。Pythonの呼び出し元スレッドでスレッドの例外をキャッチするを参照してください

ただし、メインスレッドをプリエンプトすることはなく、積極的にポーリングする必要があります。たぶん信号であなたはあなたが必要なものを手に入れることができるでしょう。

于 2012-05-15T17:20:13.887 に答える