3

我实际上是 Python Web 开发的新手。我之前关于 Web 开发的知识来自 PHP。

在 PHP 中,两个不同的 HTTP 请求之间没有保留资源(变量等)(除了$_SESSION我猜?)

那么如果Flaskis run by gunicorn,两个不同的 HTTP 请求之间会保留什么资源呢?

这个Flask问题来自. 在文档中,它说我们需要在app.teardown_request. 在我自己的测试中,如果我没有注册会话关闭代码,数据库会得到很多空闲连接。

4

1 回答 1

0

实际上只有两种处理 Web 请求的模式:

  1. 为每个请求启动整个应用程序,并在每个请求后将其拆除。所有未持久化的东西(到其他进程、磁盘或客户端)在请求结束时都会被销毁
  2. 启动应用程序,然后让它在被拆除之前处理​​多个请求。几乎所有不特定于请求的内容都会在请求之间保留

模式 #1 对每个请求都有更多的工作要做,但它确保应用程序使用的所有资源都被拆除(因此即使您忘记关闭它们,您也不会遇到泄漏数据库连接的问题)。

模式 #2 对每个请求的工作量较少,但应用程序可能会“泄漏”资源 - 就像在您的示例中,如果您没有显式关闭数据库连接,则会泄漏数据库连接。

PHP(在 Apache 下以嵌入模式运行mod_php)使用第一种模式。Flask(以及目前用于 Web 开发的大多数语言的框架)使用第二种。

于 2012-11-17T03:49:36.450 回答