1
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 に応答していないようです。なんで?

4

1 に答える 1