Python 如何从Flask API调用中删除全局变量?
我正在开发一个Flask应用程序,它将运行Python 如何从Flask API调用中删除全局变量?,python,python-3.x,flask,global-variables,Python,Python 3.x,Flask,Global Variables,我正在开发一个Flask应用程序,它将运行Foo。运行Foo后,应该可以点击hostname:8080处的端点来执行一些API调用,以更改Foo的状态 下面是一个相当小(虽然不完整)的示例。引用的方法和函数并不十分重要,因为问题是关于其状态受影响的全局对象 __foo = None app = Flask(__name__) @app.route("/start_foo") def start_foo(): return __foo._do_foo_init() or "" def
Foo
。运行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\u foo
时,她将提供一个条
,它是foo
的子类,但这并不重要
我想让@app.route
成为一个类的方法,并让foo
成为这个类的一员,但我不知道这在Flask中是否可行
是否有人建议如何删除上述应用程序中的全局对象?在flask中,您应该将应用程序全局对象存储在flask.g()中。确实,这是应用程序的“本地”,但在flask中,在同一个python解释器中应该可以有多个应用程序。该条款规定: 因为Flask设计的支柱之一是在同一个Python进程中可以有多个应用程序
因此,除了配置之外的所有内容都不应该是全局的,而应该是flask应用程序的本地内容。您看过吗?@code\u onkel我认为这对于在应用程序上下文中创建的资源非常有效。由于
run\u foo
将接受以前创建的foo
,因此我不确定它是否有效。不过,我可能误解了它的用途!我过一会儿再试试。我玩了一会儿就会回来报到。在此期间,请投一票!我不确定flask代理如何与线程交互,因此可能存在问题。但我想这也取决于你在延迟注册中到底做了什么。