首页 > 解决方案 > 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

标签: pythonflask

解决方案


推荐阅读