【问题标题】:Where do I put cleanup code in a Flask application? [duplicate]在 Flask 应用程序中,我应该将清理代码放在哪里? [复制]
【发布时间】:2012-05-29 07:51:41
【问题描述】:

我是使用 Python 进行 Web 开发的新手,我选择了 Flask 来启动我的 Web 应用程序。在应用程序关闭之前,我有一些资源可以释放,但我找不到将我的清理代码放在哪里。 Flask 提供了一些装饰器,如before_requestteardown_request,用于在请求处理之前和之后注册回调。是否有类似于在应用程序停止之前注册要调用的回调的东西? 谢谢。

【问题讨论】:

  • 我不知道应用程序停止时 Flask 提供的功能。知道你到底想清理什么会很有趣。 Python 有 atexit 模块,这可能就是你要找的。​​span>
  • 我使用的是 neo4j 数据库,并且我保留了一个连接池。我想 atexit 会完成这项工作。它是放置我的清理代码更合适的地方吗?

标签: python flask


【解决方案1】:

atexit 模块允许您注册程序终止回调。但是,如果应用程序被信号终止,则不会调用其回调。如果您需要处理这些情况,您可以使用 signal 模块注册相同的回调(例如,您可能想要处理 SIGTERM 信号)。

我可能误解了你到底想清理什么,但文件句柄或数据库连接等资源在解释器关闭时无论如何都会关闭,所以你不必担心这些。

【讨论】:

  • 事实证明,如果您运行默认的 Werkzeug 服务器(因为它在内部处理信号,然后终止您的应用程序),您将无法在 Flask 应用程序中捕获信号。所以信号甚至不会到达你的 Flask 应用程序。因此atexit 在所有情况下都有效,而信号模块则不行。
猜你喜欢
  • 2017-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-28
  • 2012-07-09
  • 2020-09-09
  • 2016-09-20
  • 2013-06-24
相关资源
最近更新 更多