如果我在无限循环中有一个线程,有没有办法在主程序结束时(例如,当我按**Ctrl**
+时**C**
)终止它?
检查这个问题。正确答案对如何以正确的方式终止线程有很好的解释:
是否有任何方法可以杀死Python中的线程?
要使线程在键盘中断信号(ctrl + c)上停止,您可以在退出之前捕获异常“ KeyboardInterrupt”并进行清除。像这样:
try:
start_thread()
except (KeyboardInterrupt, SystemExit):
cleanup_stop_thread()
sys.exit()
这样,您可以控制程序突然终止时的处理方式。
您还可以使用内置的信号模块,该模块允许您设置信号处理程序(在您的特定情况下为SIGINT信号):http
:
//docs.python.org/library/signal.html
问题内容: 我有两个线程:主线程和从主线程生成的线程。 当主线程退出时,整个程序会终止吗? 问题答案: 没有。 当所有非守护程序线程完成时,Java程序终止。 该文档指出: Java虚拟机启动时,通常只有一个非守护程序线程(通常调用某些指定类的名为main的方法)。Java虚拟机将继续执行线程,直到发生以下任何一种情况: 类的方法已被调用,安全管理器已允许进行退出操作。 不是守护程序线程的所有线程
问题内容: 看一下这段代码: 通常,到达的结尾时,程序会终止。但是在此示例中,程序将打印“ main of End”,然后继续运行,因为线程仍在运行。有没有一种方法可以使线程在结束时 自动 停止,而无需使用类似的东西? 问题答案: 您正在创建的线程是独立的,并且不依赖于主线程终止。您可以使用线程。 当没有其他线程在运行时,守护进程线程将由JVM终止,它也包括一个执行主线程。
我正在尝试终止子线程,它正在等待来自服务器的输入。我尝试使用该标志进行操作,但它在上停止,因为它等待来自服务器的输入,并且只有在此输入之后才检查该标志并中断。但这不是一个好的解决方案,因为我无法阻止它没有服务器消息。我还尝试先检查标志,然后再检查readline(),但它也不起作用。有什么好的解决办法吗?
在linux中,当主线程终止时,整个过程都会退出,不管它是以何种方式终止的,都是通过函数out()或从main返回。如果主线程从main()返回,它将返回到称为crt. o或类似的“C运行时”。在crt. o中,它的c代码是这样的:退出(main(argc, argv));退出()将由主线程 最终调用,结果,所有线程都终止。 我的想法正确吗? 如果在crt中。o exit()被诸如void thr
问题内容: 如何使多线程python程序响应Ctrl + C键事件? 编辑: 代码是这样的: 我试图在所有线程上删除join(),但仍然无法正常工作。是否因为每个线程的run()过程中的锁段? 编辑: 上面的代码应该可以工作,但是当当前变量在5,000-6,000范围内并遍历以下错误时,它总是会中断 问题答案: 在启动主线程之前,将除主线程之外的每个线程都设为守护进程(在2.6或更高版本中,在2.
我尝试构建一个GUI应用程序,从相机抓取帧并在Tkinter GUI中显示它们。Tkinter mainloop在主线程中执行,而gui的帧抓取和更新在单独的线程中进行。 下面的代码作为一个视频流被抓取并正确显示在我的gui窗口中。但是,当我通过单击“x”来调用on_close()方法来关闭gui时,gui将关闭,但程序不会完全终止。最后一次CLI输出将为“Mainloop stopped!”,但