gpt4 book ai didi

python - SIGTERM 处理程序被多次调用

转载 作者:太空宇宙 更新时间:2023-11-04 06:12:59 27 4
gpt4 key购买 nike

我正在做这样的事情

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

然后我在我的 self.run 中注册了该函数(使用守护程序)

   signal.signal(signal.SIGTERM, self.exitHandler)

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

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

一切都很好,即使有被忽略的异常,我的所有进程和线程都按预期完成。我很好奇我做错了什么以及如何摆脱被忽略的异常错误。

最佳答案

问题似乎是 stopThreads()sys.exit() 的工作不可重入,第二个 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)

关于python - SIGTERM 处理程序被多次调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17705062/

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