首页 文章

python线程中的信号中断

提问于
浏览
2

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

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

1 回答

  • 0

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

    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)
    

相关问题