我实际上是 Python Web 开发的新手。我之前关于 Web 开发的知识来自 PHP。
在 PHP 中,两个不同的 HTTP 请求之间没有保留资源(变量等)(除了$_SESSION
我猜?)
那么如果Flask
is run by gunicorn
,两个不同的 HTTP 请求之间会保留什么资源呢?
这个Flask
问题来自. 在文档中,它说我们需要在app.teardown_request
. 在我自己的测试中,如果我没有注册会话关闭代码,数据库会得到很多空闲连接。
实际上只有两种处理 Web 请求的模式:
模式 #1 对每个请求都有更多的工作要做,但它确保应用程序使用的所有资源都被拆除(因此即使您忘记关闭它们,您也不会遇到泄漏数据库连接的问题)。
模式 #2 对每个请求的工作量较少,但应用程序可能会“泄漏”资源 - 就像在您的示例中,如果您没有显式关闭数据库连接,则会泄漏数据库连接。
PHP(在 Apache 下以嵌入模式运行mod_php
)使用第一种模式。Flask(以及目前用于 Web 开发的大多数语言的框架)使用第二种。