我正在开发一个将运行 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/