python - Python 中的信号处理

标签 python multithreading signals

在我的程序中,我有一堆线程在运行,我正在尝试 中断主线程以使其异步执行某些操作。 所以我设置了一个处理程序并向主进程发送一个 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/

相关文章:

c - 使用 sigaction(), c

linux - 显示或重定向 shell 的作业控制消息

python - 使用 Python,np.gradient 计算 u 和 v 的风散度

python - 网页抓取(足球赔率)

python - 我们如何在本地计算机上使用 Python 开发基于 google Earthengine 的应用程序?

android - 支持 Retrofit 挂起的线程切换优化

python - 为什么返回 NotImplemented 而不是引发 NotImplementedError

C++ 简单的新建和删除线程和内存泄漏

c# - 如何使用 Task.Wait 避免 WinForm 卡住

c - Linux C语言管道、 fork 和信号