处理Python线程中的信号

时间:2011-01-06 15:10:05

标签: python multithreading signals interrupt

我有一个用Python编写的线程应用程序,每当通过 Ctrl + C 或有时使用kill接收中断时,应用程序会挂起来的。从一个线程呈现堆栈跟踪,但应用程序仍然在前台,我通常必须使用 Ctrl + Z 对其进行后台处理试图杀死它。

在线程应用程序内处理信号和键盘中断的正确方法是什么?

4 个答案:

答案 0 :(得分:14)

如果在启动每个线程之前设置newthread.daemon = True,则线程将在主线程退出时自动终止。这并不是你所要求的,但从你所描述的内容来看,这听起来似乎值得了解。

答案 1 :(得分:5)

我解决这个问题的方法是创建一个可以保留线程列表的模块。该模块还有一个方法可以杀死该列表中的每个线程。我在收到SIGINT信号时注册了这个方法。最后,我为Thread创建了一个包装类,它会自动将创建的实例添加到线程列表中。

答案 2 :(得分:5)

答案 3 :(得分:1)

使用signal module并继续阅读此处Signal handlers and logging in Python,了解可能存在的陷阱。

为了抓住用户的Ctrl+C操作,您必须为SIGINT操纵signal处理程序。

在信号处理程序 notify (消息队列或RLock同步属性访问)中,您的线程将关闭,或者您打算做什么。