【发布时间】:2015-02-12 10:57:06
【问题描述】:
我的目标是在我的 Flask 应用程序启动后运行任意代码。这是我所拥有的:
def run():
from webapp import app
app.run(debug=True, use_reloader=False)
理想情况下我可以这样做:
def run():
from webapp import app
app.run(debug=True, use_reloader=False)
some_code()
但代码不会继续超过app.run(),因此 some_code() 永远不会运行。
我目前正在研究的解决方案是在与 app.run() 不同的线程中运行 some_code(),创建一个 before first request 函数来设置它:
app.is_running = True
然后让 some_code() 向应用发出基本请求,以便“在第一次请求之前”代码运行。这是相当复杂的,并且很难记录。我宁愿使用 Flask 中已经提供的 app.is_running 参数,或者使用 @app.after_server_start 装饰器,但据我所知,这些都不存在。
帮我把这段代码做得更好?
死后:每次想到这个问题,我都希望有一个 @app.after_server_start 装饰器存在。
【问题讨论】:
-
为什么不直接使用
@app.before_first_request并完成它。为什么代码需要提前运行? -
换句话说,为什么代码在启动服务器之后运行如此重要(无论如何你不能在生产代码中那样使用它,总是使用适当的WSGI 容器而不是仅用于开发的脆弱 Werkzeug 服务器以
app.run()) 开始但在请求进入之前? -
主要是因为在服务器启动后运行代码更有意义,但你的权利实际上不需要那么早运行
-
要么在导入时运行代码,要么使用
before_first_request然后。 -
可能由this post 回答。也是“死后”而不是“后腐殖质”。对不起。我不得不。
标签: python flask flask-script