Python金字塔关闭甚至

2024-06-10 06:06:14 发布

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

我是Python和Pyramid的新手,所以如果我在这里做了错事,我深表歉意。在

我目前正在Docker容器内运行一个金字塔应用程序,入口点如下:

pipenv run pserve development.ini --reload

这为我的应用程序提供了正确的服务,然后我可以直接在容器内编辑代码。这一切都很好。然后,我试图将此服务注册到Netflix的Eureka服务注册中心的一个实例中,这样我就可以通过网关(如Netflix Zuul)代理到该服务。我使用了Eureka的restapi来实现这一点,这一切都很好。在

但是,当我要关闭金字塔服务时,我想向Eureka发送一个额外的HTTP请求以删除注册的服务-这是理想的,这样我就不必等待Eureka到期,而且永远不会有一个窗口让zul代理请求到被关闭的服务。在

问题是我无法可靠地找到一种在金字塔中运行关闭事件的方法。基本上,当我停止Docker容器时,服务会收到退出代码137(我相信这是kill-9的结果),并且什么也不会发生。我尝试过使用atexit和信号事件,如SIGKILL、SIGTERM、SIGINT等,但什么都没有发生。我也尝试过在没有--reload标志的情况下运行pserve,但仍然不起作用。在

在服务器和docker容器关闭之前,是否有任何方法让我可靠地发送这个删除事件?在

这是开发.ini我正在使用文件:

^{pr2}$

Tags: 方法docker代码pyramid应用程序代理事件reload
2条回答

However, when I go to shutdown the Pyramid service, I would like to send an additional HTTP request to Eureka to DELETE the registered service - This is ideal so I don't have to wait for expiry on Eureka and there will never be a window where Zuul might be proxying requests to a downed service.

这是一个特定于web服务器的,金字塔不能为它提供抽象,因为“你的里程数可能会有所不同”。Web服务器工作人员本身无法知道他们何时被杀,因为这是外部强制的。在

我会采取一种方法,让一个外部进程监视web服务器,然后在它检测到web服务器不再运行时执行清理操作。不再运行的定义可能是“没有一个进程处于活动状态”。然后您只需要一个后台调度作业(cron)来检查这种情况。或者更好的方法是,将它放在另一个监视实例上,该实例位于另一个服务器上,并且可以在服务器本身发生故障的情况下执行操作。在

WSGI应用程序没有关闭协议/api(技术上讲也没有用于启动的协议/api,尽管人们使用/希望应用程序创建时间接近服务器开始处理请求的时间)。您可能可以找到一个提供一些钩子的WSGI服务器(例如gunicorn提供http://docs.gunicorn.org/en/stable/settings.html#worker-exit),但是更好的方法是让您的上游处理服务器通过健康检查消失。期望在出现问题时能够可靠地发送DELETE并不太可能是一个健壮的解决方案。在

相关问题 更多 >