有没有什么办法可以在不使用C-Api的情况下杀死正在执行的python线程?
在我的程序中,我生成了两个运行两个不同脚本的线程 . 如果用户中断(Ctrl C)进入主进程,那么无论状态如何,都需要停止生成的脚本执行 . 我不能继续监视某些标志/变量,因为脚本执行只会发生一次 .
问题是 KeyboardInterrupt 在 join 返回之前不会开火 . 如果你想使用join,我相信你必须使用timeout参数,这会给 KeyboardInterrupt 异常一个提升的机会 . 然后当主线程从未处理的 KeyboardInterrupt 异常退出时,程序退出,因为线程 t 是 daemon (另外,小心你的拼写方式 ae mon)
KeyboardInterrupt
join
t
daemon
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)
1 回答
问题是
KeyboardInterrupt
在join
返回之前不会开火 . 如果你想使用join,我相信你必须使用timeout参数,这会给KeyboardInterrupt
异常一个提升的机会 . 然后当主线程从未处理的KeyboardInterrupt
异常退出时,程序退出,因为线程t
是daemon
(另外,小心你的拼写方式 ae mon)编辑
对于多个线程,只需依次加入每个线程