python线程中的信号中断

时间:2014-10-28 11:53:38

标签: python multithreading signals interrupt

有没有办法可以在不使用C-Api的情况下杀死正在执行的python线程?

在我的程序中,我生成了两个运行两个不同脚本的线程。 如果用户中断(Ctrl + C)进入主进程,那么无论状态如何,生成的脚本执行都需要停止。我不能继续监视某些标志/变量,因为脚本执行只会发生一次。

1 个答案:

答案 0 :(得分:0)

问题是KeyboardInterruptjoin返回之前不会触发。如果你想使用join,我相信你必须使用timeout参数,这会给KeyboardInterrupt例外提供一个机会。然后当主线程从未处理的KeyboardInterrupt异常退出时,程序退出,因为线程tdaemon(同样,要小心你的拼写方式 ae 周一)

import time
import threading
import sys

def dowork():
    print "Starting Thread"
    time.sleep(10)
    print "finished threads"

t = threading.Thread(target=dowork, args=(), name='worker')

def main():
    t.daemon = True
    t.start()
    while t.is_alive():
        t.join(1)
    time.sleep(5)

if __name__ == '__main__':
    main()

修改

对于多个线程,只需依次加入每个线程

for t in threads:
    while t.is_alive():
        t.join(1)