我目前正在使用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终止时,我如何捕获上述信号,以便我可以执行一些活动?
1条答案
按热度按时间vql8enpb1#
下面的问题和答案应该是有帮助的
问题是,正如错误所描述的那样,你必须在主线程上注册信号,如果你在flask中在worker上注册信号。所以你需要在启动 flask 的过程中注册信号。然后设置监视器或线程管理器,当信号被调用时,使用它来处理线程。
如果你需要他们在退出前做额外的活动,这是可能的,只是可能有点复杂。你只需要有一些方法,然后向线程发出信号,它从那里下来,有多种方法可以做到这一点。
python "signal only works in main thread of the main interpreter" in flask with subprocess