Python 在烧瓶/gunicorn中的何处初始化应用程序

Python 在烧瓶/gunicorn中的何处初始化应用程序,python,web-services,flask,gunicorn,Python,Web Services,Flask,Gunicorn,我正在使用Flask/Gunicorn运行一个web应用程序,并且对生命周期管理有疑问。我在Java世界中有更多使用servlet的经验 我正在创建一个服务的restful接口。该服务始终在服务器上运行,并与一组子服务器进行通信和控制。在Java中,我的服务将通过侦听器和servlet初始化方法创建和初始化(例如,传统上在main()中找到的设置) 烧瓶中的等效设置和配置在哪里?我正在考虑创建数据库连接池、向子服务器发送hello消息、将持久化系统状态重置为初始值等任务 在第一次请求之前,这会进

我正在使用Flask/Gunicorn运行一个web应用程序,并且对生命周期管理有疑问。我在Java世界中有更多使用servlet的经验

我正在创建一个服务的restful接口。该服务始终在服务器上运行,并与一组子服务器进行通信和控制。在Java中,我的服务将通过侦听器和servlet初始化方法创建和初始化(例如,传统上在
main()
中找到的设置)

烧瓶中的等效设置和配置在哪里?我正在考虑创建数据库连接池、向子服务器发送hello消息、将持久化系统状态重置为初始值等任务

在第一次请求之前,这会进入烧瓶的
方法吗

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

app = Flask(your_app_name)

#initialization code goes here
然后运行:


>gunicorn main:app

您仍然可以使用相同的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\u first\u request
方法也可以处理所有这些项目。但是你会在第一次请求时而不是在服务器启动时延迟安装。

事实上,仔细想想,这不只是运行开发服务器而不是WSGI吗?除非我误解了你的问题,不。它确实取决于你使用什么来管理服务器,但是来自文档“请记住,您的Flask应用程序对象是实际的WSGI应用程序。“这在某种程度上取决于您在运行Gunicorn时无法访问main方法。我想我可以把代码放在一个根模块中,它不检查
\uuuuuu name\uuuuuu=='\uuuuuuu main\uuuuu'
。我将用一个我所想的例子来更新我的问题。你觉得对吗?是的,我现在完全明白你的意思了。对于使用guinicorn启动,如果存在无法配置guinicorn的安装程序,则只需在应用程序上运行安装程序即可。编辑的答案反映了这一点。我怀疑当您使用uwsgi等生产应用服务器包装flask应用程序时,此解决方案是否有效。烧瓶“app”对象被传递给uwsgi,并且该对象在其作用域中没有setup\u app函数。