谁能解释一下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 秒)后发生?
我找到了一个古老的线程n Python邮件列表,但它几乎没有解释任何东西。
raise KeyboardInterrupt
不会中断time.sleep()
。前者完全在python解释器内部处理,后者调用操作系统函数。
因此,在您的情况下,键盘中断已处理,但仅在time.sleep()
完成其系统调用时处理。
试试这个:
def g():
thread.start_new_thread(f, ())
for _ in range(10):
time.sleep(1)