我正在开发一个运行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
?
答案 0 :(得分:1)
在flask中,您应该将应用程序全局对象存储在flask.g(see the documentation for more information)中。确实,这是"本地"到应用程序,但在烧瓶中应该可以在同一个python解释器中有多个应用程序。烧瓶documentation说明:
由于Flask设计的一个支柱是你可以在同一个Python进程中拥有多个应用程序。
因此除了配置之外的所有内容都不应该是全局的,而应该是烧瓶应用程序的本地内容。