有人能解释一下interrupt_main()方法在Python中是如何工作的吗?
我有这段Python代码:
import time, thread
def f():
time.sleep(5)
thread.interrupt_main()
def g():
thread.start_new_thread(f, ())
time.sleep(10)
print time.time()
try:
g()
except KeyboardInterrupt:
print time.time()
当我尝试运行它时,它会给我以下输出:
1380542215.5
# ... 10 seconds break...
1380542225.51
但是,如果我手动中断程序(CTRL-C),则线程被正确中断:
1380542357.58
^C1380542361.49
为什么线程中断仅在第一个示例中的10秒(而不是5)之后发生?
我找到了ancient thread n Python mailing list,但它几乎没有解释。
答案 0 :(得分:6)
raise KeyboardInterrupt
不会中断time.sleep()
。前者完全在python解释器中处理,后者调用操作系统函数。
因此,在您的情况下,处理了键盘中断,但仅在time.sleep()
完成系统调用时。
请改为尝试:
def g():
thread.start_new_thread(f, ())
for _ in range(10):
time.sleep(1)