当前位置: 首页 > 面试题库 >

Flask应用程序启动后运行代码

马琛
2023-03-14
问题内容

我的目标是让我的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应用程序的正确方法。该文档显示了两个不同的命令: 和 产生相同的结果并正确运行该应用程序。 两者之间有什么区别,以及用于运行Flask应用程序的区别是什么? 问题答案: 该命令是用于与Flask应用进行交互的CLI。该文档介绍了如何使用CLI命令和添加自定义命令。该命令是启动开发服务器的首选方法。 使用环境变量将命令指向您的应用程序。设置为与调试器和重新加载器一起

  • 问题内容: 我有一个现有的Flask应用程序,并且想找到通往另一个应用程序的路线。更具体地说,第二个应用程序是Plotly Dash应用程序。如何在现有的Flask应用程序中运行Dash应用程序? 我还尝试将路由添加到Dash实例,因为它是Flask应用程序,但出现错误: 问题答案: 从文档: 基本的Flask应用程序可从访问app.server。 你还可以将自己的Flask应用实例传递到Dash

  • 问题内容: 我写了一个Qt应用程序,它将在Linux上运行。它应该在启动时运行。 它应该在每个Linux- Suse,RedHat等上运行。 我应该写什么脚本,放在哪里? 我根本不知道如何编写脚本,因此,如果您附上示例,我将不胜感激。 问题答案: 您需要为您的应用程序创建一个桌面入口文件(请参阅此处),并将其放置在用户目录中。 Window Manager启动时,该目录中的任何桌面条目文件都将被执

  • 我对Spring靴不熟悉。任何时候我运行我的Spring启动应用程序,我得到错误。需要帮助运行我的Spring启动应用程序。 错误信息:白标签错误页 此应用程序没有/error的显式映射,因此您将其视为回退。 2016年10月10日星期一10:39:54 WAT出现意外错误(类型=未找到,状态=404)。没有可用的消息 代码:

  • 我想用Docker中的gunicorn运行Flask web服务应用程序。启动后,应用程序加载一个大型机器学习模型。 然而,当我在Docker中运行gunicorn时,我收到了以下超时,它只是不断地繁殖工人。 在Docker中将其作为烧瓶应用程序运行或从命令行运行带有(或不带有)Gunicorn的烧瓶应用程序都可以正常工作。如果我删除机器学习模型,它也适用于Gunicorn。 例如: 这是我与Fl

  • 问题内容: 我想在我的spring-boot应用程序开始监视目录更改后运行代码。 我尝试运行新线程,但此时尚未设置服务。 我已经能够找到,它会在设置注释之前触发。理想情况下,一旦应用程序准备处理http请求,我希望触发该事件。 在Spring Boot中启动应用程序后,是否有更好的事件可以使用,或者有更好的代码运行方式? 问题答案: 尝试: