在flask/gunicorn中在哪里初始化应用程序
我正在使用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
这个方法也可以处理所有这些事情。不过,你会在第一次请求时遇到设置的延迟,而不是在服务器启动时。