kubernetes 如何在 flask 服务器中捕获SIGTERM信号?

tp5buhyn  于 2023-08-03  发布在  Kubernetes
关注(0)|答案(1)|浏览(161)

我目前正在使用uwsgi运行flask服务器。它是一个单进程和多线程服务器。我想在k8s发送SIGTERM或SIGINT信号时在pod上执行一些活动。但是当我在课堂上尝试做以下事情时,

def __register_signal_handlers(self):
    signal.signal(signal.SIGINT, self.__exit_gracefully)
    signal.signal(signal.SIGTERM, self.__exit_gracefully)

字符串
它引起了ValueError: Signal must be registered on the main thread,我还检查了uwsgi信号寄存器,他们没有提到任何关于SIGTERM或SIGINT。
当pod被k8s终止时,我如何捕获上述信号,以便我可以执行一些活动?

vql8enpb

vql8enpb1#

下面的问题和答案应该是有帮助的
问题是,正如错误所描述的那样,你必须在主线程上注册信号,如果你在flask中在worker上注册信号。所以你需要在启动 flask 的过程中注册信号。然后设置监视器或线程管理器,当信号被调用时,使用它来处理线程。
如果你需要他们在退出前做额外的活动,这是可能的,只是可能有点复杂。你只需要有一些方法,然后向线程发出信号,它从那里下来,有多种方法可以做到这一点。
python "signal only works in main thread of the main interpreter" in flask with subprocess

相关问题