在flask/gunicorn中初始化应用的地方

Pac*_*ace 12 python web-services flask gunicorn

我正在使用Flask/Gunicorn来运行Web应用程序并对生命周期管理提出疑问.我在使用servlet的Java世界中有更多的经验.

我正在为服务创建一个安静的界面.该服务始终在服务器上运行,并通过一组子服务器进行通信和控制.在Java中,我的服务将main()通过监听器和servlet初始化方法创建和初始化(例如传统上找到的设置).

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

那会before_first_request是Flask 的方法吗?

基于@Pyrce的评论,我想我可以创建一个main.py:

app = Flask(your_app_name)

#initialization code goes here
Run Code Online (Sandbox Code Playgroud)

然后运行:

>gunicorn main:app

Pyr*_*rce 19

您仍然可以使用相同的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='...')
Run Code Online (Sandbox Code Playgroud)

before_first_request方法还可以处理所有这些项目.但是你会在第一次请求而不是服务器启动时延迟设置.

  • 实际上,第二个想法,那不就是运行开发服务器而不是WSGI吗? (2认同)
  • 我怀疑当您使用 uwsgi 等生产应用程序服务器包装 Flask 应用程序时,此解决方案是否有效。Flask“app”对象被传递给 uwsgi,并且该对象在其范围内没有 setup_app 函数。 (2认同)