编程语言
首页 > 编程语言> > Python主线程中断

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