根据Is it safe to store per-request data on flask.request?中给出的答案,看来g
对象是本地请求的(=具有单个请求的生存期)。也许我误解了这个答案,但是Flask文档指出g
对象是全局的,似乎与这个答案矛盾。
文档本身对这些细节有些简短,所以请介意向上下文和全局对象g
解释这些细节吗?专门解决以下问题:
request
对象,g
对象还是哪种对象?)app
对象,g
对象还是哪种对象?)app
或g
对象随后需要在每个工作进程的生命周期中分别初始化。)答案 0 :(得分:2)
为了在单个请求的生命周期内存储数据,应该怎么做?
g
对象是为此目的而设计的。 documentation指出:
Flask为您提供一个特殊的对象,以确保它仅对活动请求有效,并且将为每个请求返回不同的值。
尽管文档将g
称为“全局”,但这并不准确-“线程全局”会更好。
为了存储应用程序生命周期中的数据,应该怎么做?
我认为这个问题的答案比我能回答的更好(或更好): Preserving global state in a flask application
烧瓶可以在多进程环境中使用。假设在这种操作模式下将有多个应用程序范围内的对象是否正确? (这意味着所有这些app或g对象随后需要在每个工作进程的生命周期中分别进行初始化。)
在多进程环境中,每个请求都作为单独的线程处理,并且g
在每个请求的基础上初始化和销毁,因此,与之并发的g
对象与线程-尽管每个线程只能看到自己的线程。在大多数情况下,我怀疑应该只有一个app
对象,即程序员创建的Flask()类的实例,即app = Flask(__name__)
或类似对象。
Blueprints和Application Dispatching是具有“多个”应用程序对象的两种方式,只要您同时运行多个应用程序即可。