类似于这个问题,我想在整个Flask应用程序(所有请求)中共享一个变量。
我正在编译一个大数据文件(相当大的开销),并希望尽可能少地进行编译—将结果存储在一个变量中,以便以后可以访问它。使用烧瓶。g
无法工作,因为它在请求之间被清除。
六年前,在Reddit的一篇帖子中,Armin Ronacher(Flask的创建者)说:
您可以将它附加到应用程序对象,并通过flask.current_app.whatever_variable
访问它。
以下是我的两个问题:
A) 这仍然是推荐的做法吗?
b)这两种方法(附加到current_app
或应用程序工厂内的app
)是否等价?
使用当前应用程序:
from flask import current_app
current_app.my_var = <<file>>
使用应用程序工厂:
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)
主要是这样做。派克
import Globals
app = Flask(__name__)
Globals.init_globals(app)