【问题标题】:Python Flask app not exiting with sys exit [duplicate]Python Flask应用程序未退出sys exit [重复]
【发布时间】:2025-08-15 21:15:01
【问题描述】:

我希望能够通过这样的 http 请求远程终止我的烧瓶应用程序:

import flask
import sys

master = flask.Flask(__name__)

@master.route('/shutdown')
def shutdown():
    #do things
    sys.exit()

if __name__ == '__main__':
    master.run()

问题是它不起作用。从终端我什么也得不到,好像它甚至没有处理请求。我知道 sys.exit() 只是引发了一个 SystemExit,所以我认为它可能是在某个地方被抓住了。 os._exit(0) 确实有效的事实也让我这么想。

我是不是被什么蠢事绊倒了?它实际上是一个错误并且有解决方法吗?如果可能的话,我宁愿不使用 os._exit(0) 。谢谢!

编辑:我不会说这个问题是重复的,因为接受的答案不同,另一个来自 13 年(Flask 在此期间已经走了很长一段路)

【问题讨论】:

标签: python flask


【解决方案1】:

我认为没有错误。

因为烧瓶可能会捕获所有异常,以便不停止主进程为应用程序提供服务。

正如你提到的,使用 os._exit(0) 就可以了。

据我所见,它被python2.7/SocketServer.py捕获:

598         try:
599             self.finish_request(request, client_address)
600             self.shutdown_request(request)
601         except:
602             self.handle_error(request, client_address)
603             self.shutdown_request(request)

它基本上可以捕获所有内容,但会处理错误。

顺便说一句:我是唯一一个认为可以用 try/except/finally 重构的人吗?

【讨论】:

  • 谢谢,是的,裸尝试/除外不是最佳选择。我相信我会坚持使用 os._exit ;)
  • 请注意,如果您的应用程序在生产环境中并且在 gunicorn 下运行。这将是无用的;)