在我的程序中,我有一堆线程在运行,我正在尝试 中断主线程以使其异步执行某些操作。 所以我设置了一个处理程序并向主进程发送一个 SIGUSR1 - 请参阅代码 下面:
def SigUSR1Handler(signum, frame):
self._logger.debug('Received SIGUSR1')
return
signal.signal(signal.SIGUSR1, SigUSR1Handler)
[signal.signal(signal.SIGUSR1, signal.SIG_IGN)]
在上面的例子中,所有的线程和主进程都停止了——从一个'c' 从观点来看,这是出乎意料的——我希望线程继续运行 在信号之前。如果我改为放入 SIG_IGN,一切都会继续 很好。
有人能告诉我怎么做吗?也许我必须对“框架”做点什么 手动回到原来的位置..只是一个猜测 提前致谢,
感谢您对此的帮助。
为了进一步解释,我有线程实例将字符串信息写入 一个也输出到文件的套接字。这些线程运行它们自己的计时器,因此它们 独立地将它们的输出写入套接字。当程序运行时我也看到 它们在 stdout 上的输出,但当我从信号中看到调试行时,它们都停止了。
我需要线程不断发送这个信息,但我需要主程序 接受命令,以便它也开始(并行)做其他事情一段时间。 我以为我只能从命令行发送一个信号来触发它。
最佳答案
混合信号和线程总是有点不稳定。但是,您所描述的情况不应发生。 Python 只在主线程中处理信号。如果操作系统将信号传递给另一个线程,则该线程可能会被短暂中断(当它正在执行系统调用时),但它不会执行信号处理程序。主线程将被要求在下一次机会时执行信号处理程序。
当您发送信号时,您的线程(包括主线程)实际上在做什么?您如何注意到它们都“停止”了?是短暂的暂停(很容易解释为主线程在处理信号之前需要获取 GIL)还是进程完全中断?
关于python - Python 中的信号处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2163194/