をキャッチしていない私は、クリーンな方法でPythonのスレッドを殺害について、ここで複数のスレッドを見てきましたが、私はもっと根本的な問題を抱えていると思います。私はCtrl-Cをキーボード割り込みを気づくために、メインスレッドの希望、そしてそこから、私は他のスレッド(t1
とt2
)の終了を扱うことができるメインスレッドはKeyboardInterrupt
t1 = threading.Thread(target=method1, args=(args1,))
t1.daemon = True
t2 = threading.Thread(target=method2, args=(args2,))
t2.daemon = True
t1.start()
t2.start()
while True:
time.sleep(1)
:私はこのようになりますいくつかのコードを持っていると仮定文脈を考慮して適切である。しかし、私が何をしても、私はメインスレッドにKeyboardInterrupt
をキャッチすることはできません。
try:
while True: time.sleep(100)
except KeyboardInterrupt:
print "Quitting!"
またはこのような何か:私はこのような何か試してみた
threads = []
threads.append(t1)
threads.append(t2)
while len(threads) > 0:
try:
threads = [t for t in threads if t is not None and t.isAlive()]
time.sleep(1)
except:
print "Ctrl - C received, kiling"
for t in threads:
t.kill_received = True
をしかし、これらのどれも、これだけの表示、例外ハンドラ内のメッセージを印刷しない:
Exception in thread Thread-3:
Traceback (most recent call last):
File "/usr/lib/python2.7/threading.py", line 801, in __bootstrap_inner
self.run()
File "/usr/local/lib/python2.7/dist-packages/audioread/gstdec.py", line 149, in run
self.loop.run()
File "/usr/lib/python2.7/dist-packages/gi/overrides/GLib.py", line 576, in run
raise KeyboardInterrupt
KeyboardInterrupt
をここ
主な問題は、最終的には、私もそれに対処するために持っている(安全t1
とt2
を殺すためにどのようにではありません)、なぜメインスレッドはKeyboardInterrupt
をキャッチしていないのですか?
編集:私は例を書いてきたように、私はすでにのtry-除くブロック内のwhileループで寝関与アプローチを試みました。他のアイデア?
これは、私がthreading.Thread' 'サブクラス化しようとしたためCPythonのソースからコードをコピーした非常に神秘的です'run()'メソッドは 'try/finally'メソッドを持っています。私は例外に '例外:'を追加しましたが、 'KeyboardInterrupt'が発生したときには決して起動しません。少し深い魔法が続くはずです。私はスレッドがデモニックであるという事実と関係があるかもしれないと思います。 – martineau
それは価値があるため、デーモンの属性をFalseに設定して試してみました。役に立たない。 – kaajaa328
[is-there-any-way-to-kill-a-thread-]について読む(https://stackoverflow.com/questions/323972/is-there-any-way-to-kill-a-thread- in-python)、[keyboardinterrupt-in-multithreading](https://stackoverflow.com/questions/43721150/python-keyboardinterrupt-in-multithreading)、[keyboardinterrupt](https://stackoverflow.com/questions/4136632/) CTRL-CIE-keyboardinterrupt・ツー・キル・スレッド型のpython)の – stovfl