多次调用SIGTERM处理程序

2024-10-02 00:33:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我喜欢这样做

def exitHandler(self, *args):
    self.stopThreads()
    sys.exit(2)

我在我的自行运行(使用守护程序)

^{pr2}$

在self.stop线程()有时需要一段时间才能完成。Im正在停止由这些线程启动的子进程。当多次调用信号处理程序时,我会收到如下错误消息:

Exception SystemExit: 2 in <bound method Popen.__del__ of <subprocess.Popen object at 0x929d10c>> ignored

一切都很好,即使有被忽略的异常,我的所有进程和线程都会按其应有的方式完成。我很好奇我做错了什么,以及如何消除被忽略的异常错误。在


Tags: self程序进程def错误sysexitargs
1条回答
网友
1楼 · 发布于 2024-10-02 00:33:23

问题似乎是stopThreads()或{}的工作不可重入,而第二个SIGTERM会导致其中一个或两个被调用。在

现在,您不能阻止SIGTERM被多次传递,但是您可以修改您的逻辑以适应它。通常(通常也是正确的)建议是重构信号处理程序以简单地设置一个标志,然后在主循环中检查该标志:

def termHandler(self, *args):
    global flag_exit
    global exit_code

    flag_exit = True
    exit_code = 2


... in the main loop ...

    while not flag_exit:
        do_work()

    self.stopThreads()
    sys.exit(exit_code)

相关问题 更多 >

    热门问题