最近接手Flask项目,再引入多线程操作时出现 ‘RuntimeError: Working outside of application context.’逐步调试发现是我使用了公共变量导致,flask 框架引入了应用上下文管理,详见:http://flask.pocoo.org/docs/0.12/appcontext/,但又不能简单使用下列方法解决,因为无法获取到公共变量。
from flask import Flask, current_app
app = Flask(__name__)
with app.app_context():
# within this block, current_app points to app.
print current_app.name
于是我把详细解决方法写在下面:
config.py
class Config:
IPMI_INFO = [...] # 这个是多线程要调用的公共变量,也是它导致出现标题错误
config = {
'default': Config
}...
app.__init__.py
...代码省略
def create_app(config_name):
app = Flask(__name__)
app.config.from_object(config[config_name])
config[config_name].init_app(app)
...
执行文件 **.py
from app import create_app#新添解决代码
app = create_app('default')#新添解决代码
...
with app.app_context():#新添代码 解决
...原代码内容