質問

している場合は、スレッドは無限ループがあるので、解除した場合は、プログラムが終了します(たとえば、プレス Ctrl+C)?

役に立ちましたか?

解決

チェック。正しい答えが説明終了のスレッド右方法:が"釣りスタ"なら釣りスレッドブ?

のスレッドを停止キーボード割り込み信号(ctrl+c)では例外をキャッチし、この例外"KeyboardInterrupt"の清掃活動を実終了する前に.このように:

try:
    start_thread()  
except (KeyboardInterrupt, SystemExit):
    cleanup_stop_thread()
    sys.exit()

このように制御できないプログラムの突然終了します。

も利用できますの信号モジュールをまとめて見ることができる設定の信号ハンドラー(お客様の特定の場合にSIGINT信号): http://docs.python.org/library/signal.html

他のヒント

あなたがスレッドデーモンあなたのワーカースレッドを作る場合(例えば、メインスレッド)すべての非デーモンスレッドが終了したときます。

、彼らが死んでしまいます

http://docs.python.org/library/threading。 htmlの#threading.Thread.daemonする

使用のatexit のモジュールPythonの標準ライブラリのこのようKeyboardInterruptとしてキャッチされない例外を含め、メインスレッドのいずれかの合理的に「クリーン」終了、上(メインスレッドで)呼び出される「終了」機能を登録します。このような終了関数は(!必然的にメインスレッドでも)あなたが必要とするすべてのstop関数を呼び出すことができます。一緒に適切に必要なシステム機能を設計するツールを提供しますdaemonとしてスレッドを設定する可能性、と。

myThread = Thread(target = function) - - あなたはそうのようなスレッドを生成した場合、

当時とmyThread.start(); myThread.join()を行います。 CTRL-Cが開始されると、それはそのブロックmyThread.join()呼び出しを待っているので、メインスレッドは終了しません。これを修正するには、単に.join()の呼び出しにタイムアウトに置きます。タイムアウトは限り、あなたが望むようにすることができます。あなたはそれが無期限に待機したい場合は、ちょうど99999のようにそれはまた、すべてのスレッドの終了時に、メインスレッド(非デーモン)が終了します。

ようmyThread.daemon = Trueを行うには良い方法だ、本当に長いタイムアウトに入れます

デーモンスレッドとしてサブスレッドを可能としてみます。

例:

from threading import Thread

threaded = Thread(target=<your-method>)
threaded.daemon = True  # This thread dies when main thread (only non-daemon thread) exits.
threaded.start()

または(行で):

from threading import Thread

threaded = Thread(target=<your-method>, daemon=True).start()
<時間>

場合は、あなたのメインスレッドを終了する( "例えば、私が押したときに、 Ctrlキー + C ")という他のスレッドは、上記の命令で殺します。

すべてのファイナライザ命令が実行されていないので、

はデーモンスレッドが不正に殺されます。 可能な解決策をチェックすることであるスレッドではなく、無限ループの生きている主である。

例えば。 Pythonの3のために:

while threading.main_thread().isAlive():
    do.you.subthread.thing()
gracefully.close.the.thread()
メインスレッドがある場合は、

チェックを参照してください。別のスレッドでからまだ生きています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top