python - 如何从 Flask API 调用中删除全局变量?

标签 python python-3.x flask global-variables

我正在开发一个将运行 Foo 的 Flask 应用程序。一旦 Foo 运行,应该可以访问 hostname:8080 的端点以执行一些 API 调用来更改 Foo 的状态.

下面是一个相当小(但不完整)的例子。引用的方法和函数并不是非常重要,因为问题是关于状态受到影响的全局对象

__foo = None
app = Flask(__name__)

@app.route("/start_foo")
def start_foo():
    return __foo._do_foo_init() or ""

def run_foo(foo, debug=False):
    """
    Entry point for clients to run a foo
    :param foo:
    :return:
    """
    global __foo
    __foo = foo
    t = threading.Thread(target=delayed_registration, args=(foo,))
    t.start()
    app.run(host=hostname, debug=debug, port=8080)

当用户调用run_foo 时,她会提供一个Bar,它是Foo 的子类,但这应该无关紧要。

我在考虑让 @app.route 成为一个类的方法,并将 foo 作为该类的成员,但我不知道是否这在 Flask 中是可能的。

有没有人对如何删除上述应用程序中的全局 __foo 有建议?

最佳答案

在 flask 中,您应该将应用程序全局对象存储在 flask.g ( see the documentation for more information ) 中。的确,这对应用程序来说是“本地的”,但在 flask 中,同一个 python 解释器中应该可以有多个应用程序。 flask documentation状态:

Since one of the pillars of Flask’s design is that you can have more than one application in the same Python process.

因此,除了配置之外的所有内容都不应该是全局的,而应该是 flask 应用程序的本地内容。

关于python - 如何从 Flask API 调用中删除全局变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38075026/

相关文章:

python - 在 Python 中评估数学表达式

Python Flask - 将服务器构建为可执行文件 (Py2exe)

python - 如何在 tkinter 中正确保存文件

Python zip() 两个列表

python - 根据累积值将非累积计算到新列中 (Python)

python - 如何重定向到 flask 蓝图父级?

python - 当使用 url_for 链接到 @route 中带有变量的函数时,Flask-Classy 给出 BuildError

python - 如何计算 Python 文本文件中超长字符串中最长的重复字符序列

python - 为什么 Fabric 显示与服务器断开连接的消息将近 2 分钟?

python - Pandas 数据框 : turn date in column into value in row