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 Flask

from 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

回到顶部