gpt4 book ai didi

python - 在 flask 应用程序中保留全局状态

转载 作者:IT老高 更新时间:2023-10-28 20:25:44 31 4
gpt4 key购买 nike

我正在尝试在我的 flask 应用程序中保存一个缓存字典。

据我了解,Application Context ,尤其是 flask.g object应该用于此。

设置:

import flask as f

app = f.Flask(__name__)

现在如果我这样做:

with app.app_context():
f.g.foo = "bar"
print f.g.foo

它打印 bar

继续以下内容:

with app.app_context():
print f.g.foo

AttributeError: '_AppCtxGlobals' object has no attribute 'foo'

我不明白,文档根本没有帮助。如果我正确阅读了它们,则应该保留状态。

另一个想法我的想法是简单地使用模块范围的变量:

cache = {}

def some_function():
cache['foo'] = "bar"

但似乎这些在每次请求时都会重置。

如何正确地做到这一点?

编辑: Flask 10.1

最佳答案

根据您的问题,我认为您对“全局”的定义感到困惑。

在现有的 Flask 设置中,您有一个 Flask 服务器,它具有多个线程,并且可能有多个进程处理请求。假设您有一个像“itemlist = []”这样的库存全局变量,并且您想在每个请求中继续添加它 - 例如,每次有人向端点发出 POST 请求时。这在理论上和实践上都是完全可能的。这也是一个非常糟糕的主意。

问题在于您无法轻松控制哪些线程和进程“获胜”——列表可能会以非常不稳定的顺序排列,或者完全损坏。所以现在你需要谈谈锁、互斥体和其他原语。这很难而且很烦人。

您应该尽可能保持网络服务器本身无状态。每个请求应该是完全独立的,并且不共享服务器中的任何状态。相反,请使用将为您处理状态的数据库或缓存层。这看起来更复杂,但实际上更简单。以 SQLite 为例;这很简单。

为了解决“flask.g”对象,它是一个基于每个请求的全局对象

http://flask.pocoo.org/docs/api/#flask.g

它在请求之间被“删除干净”,不能用于在它们之间共享状态。

关于python - 在 flask 应用程序中保留全局状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19277280/

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