在flask/gunicorn中在哪里初始化应用程序

20 投票
1 回答
28427 浏览
提问于 2025-04-17 21:21

我正在使用Flask和Gunicorn来运行一个网页应用,有个关于生命周期管理的问题。我在Java的环境中用过servlet,经验比较多。

我正在创建一个与服务的接口,这个服务会一直在服务器上运行,并且与一组子服务器进行通信和控制。在Java中,我的服务会通过监听器和servlet初始化方法来创建和初始化(比如在main()方法中常见的设置)。

那么在Flask中,类似的设置和配置应该放在哪里呢?我想到的任务包括创建数据库连接池、向子服务器发送问候消息、将持久化的系统状态重置为初始值等等。

这些工作可以放在Flask的before_first_request方法中吗?

根据@Pyrce的评论,我觉得我可以创建一个main.py

app = Flask(your_app_name)

#initialization code goes here

然后用以下命令运行:

>gunicorn main:app

1 个回答

25

你仍然可以使用相同的main()方法的写法。下面是一个入门代码示例:

app = Flask(your_app_name) # Needs defining at file global scope for thread-local sharing

def setup_app(app):
   # All your initialization code
setup_app(app)

if __name__ == '__main__':
    app.run(host=my_dev_host, port=my_dev_port, etc='...')

before_first_request这个方法也可以处理所有这些事情。不过,你会在第一次请求时遇到设置的延迟,而不是在服务器启动时。

撰写回答