python - Flask - 在多线程上下文中无法访问 G 变量
问题描述
我正在使用 ThreadPoolExecutor 在我的应用程序中创建线程。当我尝试在任何线程池任务中访问 Flask g 变量时,它给了我错误
RuntimeError: Working outside of application context.
我也尝试使用 app.app_context() 但它失败并出现错误
AttributeError: '_AppCtxGlobals' object has no attribute 'Test'
无论如何我可以在多线程上下文中访问 g 变量吗?
重现问题的示例代码。
from flask import Flask, g
from concurrent.futures import ThreadPoolExecutor
app = Flask(__name__)
if __name__ == '__main__':
app.run('0.0.0.0', port=8000, debug=False)
@app.before_request
def before_req():
g.Test = 'test'
@app.route("/test", methods=["GET"])
def handle_request():
with ThreadPoolExecutor(max_workers=1) as executor:
response = executor.submit(t1)
var = response.result()
print(var)
def t1():
# with app.app_context():
return g.Test
解决方案
推荐阅读
- r - 删除列表中不需要的字符串部分,并将这些部分组合成 R 中的单个字符串
- reactjs - 如何使用 Spring Boot(单独的 React 前端)在 REST API 后端中使用社交登录(Facebook、Google)对用户进行身份验证
- swift - 如何在 swift 中向 tableview 添加搜索栏?
- postgresql - all_tab_columns 是否有 pg 等效表?
- c++ - 实例化模板类类型时如何抛出错误?
- python - 为什么在heroku上我的django应用程序的每个页面都需要登录?
- python - Tweepy 检查被阻止的用户?
- google-sheets - 跳过 Google 表格中的空值
- c# - OpenGL - 在 sampler2D 上使用无绑定纹理会禁用 TextureCubeMapSeamless
- sql - 需要获取在 SQL 中重叠的最大日期范围