gpt4 book ai didi

python - Python 中的信号处理

转载 作者:太空宇宙 更新时间:2023-11-03 11:11:24 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com