Flask应用程序启动后运行代码
我的目标是让我的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
装饰器,但据我所知,这两个都不存在。
回答:
如果你需要在启动Flask应用程序之后但严格在第一个请求之前执行一些代码,而不是由@ app.before_first_request可以处理的第一个请求的执行触发,则应使用CESCO所说的Flask_Script,但是你可以继承Server类并覆盖__ call __
方法,而不是使用@ manager.command覆盖runserver命令:
from flask import Flaskfrom flask_script import Manager, Server
def custom_call():
#Your code
pass
class CustomServer(Server):
def __call__(self, app, *args, **kwargs):
custom_call()
#Hint: Here you could manipulate app
return Server.__call__(self, app, *args, **kwargs)
app = Flask(__name__)
manager = Manager(app)
# Remeber to add the command to your Manager instance
manager.add_command('runserver', CustomServer())
if __name__ == "__main__":
manager.run()
这样,你就不会覆盖runserver命令的默认选项。
以上是 Flask应用程序启动后运行代码 的全部内容, 来源链接: utcz.com/qa/435890.html