Python主线程中断
作者:互联网
谁能解释一下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,但它几乎没有解释.
解决方法:
raise KeyboardInterrupt不会中断time.sleep().前者完全在python解释器内部处理,后者调用操作系统函数.
因此,在您的情况下,键盘中断已被处理,但仅在time.sleep()完成其系统调用时.
试试这个:
def g():
thread.start_new_thread(f, ())
for _ in range(10):
time.sleep(1)
标签:python,multithreading,keyboardinterrupt 来源: https://codeday.me/bug/20190529/1176575.html