在Python Flask中:存储数据的适当位置是什么?

2024-06-26 17:45:31 发布

您现在位置:Python中文网/ 问答频道 /正文

根据Is it safe to store per-request data on flask.request?中给出的答案,g对象似乎是请求本地的(=具有单个请求的生存期)。也许我误解了这个答案,但是Flask文档指出g对象是全局的,这似乎与这个答案相矛盾。在

文档本身对这些细节有点欠缺,所以请您解释一下上下文和全局对象g的细节?具体解决以下问题:

  1. 为了在单个请求的生存期内存储数据,应该如何进行存储?(使用request对象、g对象或哪种对象?)在
  2. 为了在应用程序的生存期内存储数据,应该如何进行存储?(使用app对象、g对象还是哪种对象?)在
  3. 烧瓶可用于多工艺环境。假设在这种操作模式下会有多个应用程序范围的对象,这是否正确?(这意味着所有这些app或{}对象都需要在每个工作进程的生命周期内单独初始化。)
  4. 与问题3相关:如果我需要一个应用程序范围内的、单一的、类似于单例的对象为Flask web应用程序提供服务,那么必须将此服务分解到外部进程中?(在多进程操作模式下,不会有单一的单例实例?)在

Tags: 数据对象答案文档app应用程序flask进程
1条回答
网友
1楼 · 发布于 2024-06-26 17:45:31

为了在单个请求的生存期内存储数据,应该如何进行存储?

g对象就是为此而设计的。documentation声明:

Flask provides you with a special object that ensures it is only valid for the active request and that will return different values for each request.

尽管文档将g称为“global”,但这并不准确-“thread global”会更好。在

为了在应用程序的生存期内存储数据,应该如何进行存储?

我认为这个问题的答案比我能回答得好(或更好): Preserving global state in a flask application

烧瓶可用于多工艺环境。假设在这种操作模式下会有多个应用程序范围的对象,这是正确的吗?(这意味着所有这些app或g对象需要在每个worker进程的生命周期内单独初始化。)

在多进程环境中,每个请求都被作为一个独立的线程来处理,并且g是在每个请求的基础上初始化和销毁的,因此并发的g对象和线程一样多——尽管每个线程只能看到自己的对象。在大多数情况下,我怀疑应该只有一个app对象,即程序员创建的Flask()类的实例,即app = Flask(__name__)或类似对象。在

BlueprintsApplication Dispatching是拥有“多个”应用程序对象的两种方式,只要您有多个应用程序并发运行。在

相关问题 更多 >