gpt4 book ai didi

python - 在Python Flask中: What are appropriate places to store data?

转载 作者:行者123 更新时间:2023-12-03 00:59:33 27 4
gpt4 key购买 nike

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

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

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

最佳答案

为了在单个请求的生命周期内存储数据,应该如何完成?

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 称为“全局”,但这并不准确 - “线程全局”会更好。

为了在应用程序的生命周期中存储数据,应该如何完成?

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

Flask 可以在多进程环境中使用。假设在这种操作模式下将存在多个应用程序范围的对象是否正确? (这意味着所有这些 app 或 g 对象都需要在每个工作进程的生命周期内单独初始化。)

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

BlueprintsApplication Dispatching是拥有“多个”应用程序对象的两种方式,只要您同时运行多个应用程序即可。

关于python - 在Python Flask中: What are appropriate places to store data?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52441176/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com