在PythonWeb框架中,如何在HTTP请求之间保留资源?

在PythonWeb框架中,如何在HTTP请求之间保留资源?,python,flask,Python,Flask,实际上,我对Python web开发还不熟悉。我以前关于web开发的知识来自PHP 在PHP中,在两个不同的HTTP请求之间没有保留任何资源(变量等)(除了$\u SESSION我想是吧?) 那么,如果Flask由gunicorn运行,那么在两个不同的HTTP请求之间会保留什么资源呢 这个问题来自于《烧瓶》。在文档中,它说我们需要在app.teardown\u请求中注册数据库会话关闭代码。在我自己的测试中,如果我没有注册会话关闭代码,数据库将获得许多空闲连接。处理web请求实际上只有两种模式:

实际上,我对Python web开发还不熟悉。我以前关于web开发的知识来自PHP

在PHP中,在两个不同的HTTP请求之间没有保留任何资源(变量等)(除了
$\u SESSION
我想是吧?)

那么,如果
Flask
gunicorn
运行,那么在两个不同的HTTP请求之间会保留什么资源呢


这个问题来自于《烧瓶》。在文档中,它说我们需要在
app.teardown\u请求中注册数据库会话关闭代码。在我自己的测试中,如果我没有注册会话关闭代码,数据库将获得许多空闲连接。

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

  • 为每个请求启动整个应用程序,并在每个请求后将其拆下。所有未持久化的内容(到其他进程、磁盘或客户机)都会在请求结束时销毁
  • 启动应用程序,然后让它在被拆除之前处理多个请求。几乎所有不特定于请求的内容都会在请求之间保留
  • 模式#1对每个请求都有更多的工作要做,但它确保应用程序使用的所有资源都被拆除(这样即使忘记关闭数据库连接,也不会出现数据库连接泄漏问题)

    模式#2对每个请求所做的工作较少,但应用程序有可能“泄漏”资源——例如在您的示例中,如果不显式关闭数据库连接,则会泄漏它们


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

    感谢您的回答。如果在Python中,大多数资源都是在请求之间保留的,那么如何使用以前定义的变量?@yegle-我对“application”的使用有点不清楚。web框架使用的大多数资源在请求之间保留。如果需要保留请求之间的数据库连接池,那么需要将其存储在框架级别。默认情况下,框架中是否保留了任何资源?或者这是一种基于框架的行为?@yegle-大多数情况下,生成成本高昂的信息都会被保留下来。例如,路由和函数之间的映射、模板环境等。