gpt4 book ai didi

python - 将变量附加到应用程序与 Flask 中的 current_app 相同吗?

转载 作者:行者123 更新时间:2023-12-04 04:18:18 30 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Are global variables thread-safe in Flask? How do I share data between requests?

(4 个回答)



Store large data or a service connection per Flask session

(1 个回答)


去年关闭。




类似于 this question ,我想在整个 Flask 应用程序(所有请求)之间共享一个变量。

我正在编译一个大数据文件(相当大的开销)并希望尽可能少地进行编译 - 将结果存储在一个变量中,以便以后可以访问。使用 flask.g不会工作,因为它在请求之间被擦干净。

Reddit post六年前,Armin Ronacher(Flask 的创造者)说:

You can just attach it to the application object and access it via flask.current_app.whatever_variable.



这是我的两个问题:

A) 这仍然是推荐的做法吗?

B) 这两种方法(在应用程序工厂中附加到 current_appapp)是否等效?

使用 current_app :
from flask import current_app
current_app.my_var = <<file>>

使用 application factory :
def create_app(config_filename):
app = Flask(__name__)
app.config.from_pyfile(config_filename)
app.my_var = <<file>>
...
return app

最佳答案

通常在我的项目中,我创建一个 Globals.py 来在我的程序的每个部分使用全局变量,如下所示:

from celery import Celery
from flask_babel import Babel
from flask_marshmallow import Marshmallow
from flask_socketio import SocketIO
from flask import json, Flask

app: Flask = None
marshmallow: Marshmallow = Marshmallow()
socket = SocketIO(async_mode="eventlet", json=json)
celery: Celery
babel = Babel()
current_user = None


def init_globals(currentApp):
global marshmallow
global app
global socket
global celery
global babel
app = currentApp
marshmallow.init_app(app)
babel.init_app(app)
socket.init_app(app)

celery = Celery(app.name, broker=app.config['CELERY_BROKER_URL'])
celery.conf.update(app.config)

并在 main.py 中执行此操作
import Globals
app = Flask(__name__)
Globals.init_globals(app)

关于python - 将变量附加到应用程序与 Flask 中的 current_app 相同吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60082525/

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