import sys
import time
import threading
class exThread(threading.Thread):
def __init__(self, threadId):
threading.Thread.__init__(self)
self.threadId = threadId
def run(self):
try:
while 1:
pass
except KeyboardInterrupt:
print "Ctrl-C caught by thread"
finally:
print "Thread's finally clause being executed"
sys.exit() # Same as thread.exit()
cond = True
def func():
pass
try:
th = exThread(1)
th.start()
while True:
if cond:
func()
except KeyboardInterrupt:
print "Ctrl-C caught by main thread"
sys.exit(0)
finally:
print "Executing the finally clause from main thread"
上記のコードを実行すると、Ctrl-C を押すと、finally 句から出力した後にメイン スレッドが終了します。現在、子スレッドは非デーモンであるため、まだ try: except KeyboardInterrupt ブロックで実行されています。ただし、この子スレッドは、KeyboardInterrupt 例外をキャッチすることになっているにもかかわらず、Ctrl-C に応答していないようです。なんで?