Where in flask/gunicorn to initialize application

匿名 (未验证) 提交于 2019-12-03 02:30:02

问题:

I'm using Flask/Gunicorn to run a web application and have a question about the lifecycle management. I have more experience in the Java world with servlets.

I'm creating a restful interface to a service. The service is always running on the server and communicates and controls with a set of sub-servers. In Java, my service would be created and initialized (e.g. the setup traditionally found in main()) through listeners and servlet initialization methods.

Where would the equivalent setup and configuration be in Flask? I'm thinking of tasks like creating a database connection pool, sending hello messages to the sub-servers, resetting the persisted system state to initial values, etc.

Would that go in the before_first_request method of Flask?

Based on @Pyrce's comments I think I could create a main.py:

app = Flask(your_app_name)  #initialization code goes here 

and then run with:

>gunicorn main:app

回答1:

You can still use the same main() method paradigm. See this starter code below:

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='...') 

The before_first_request method could also handle all of those items. But you'll have the delay of setup on first request rather than on server launch.



回答2:

Using mod_wsgi this works for me.

I have my "initialization" function(s) run inside the if __name__ == "__main__": check clause. For example:

def some_init():     # do something that is required for app to function  if __name__ == "__main__":     some_init()     app.run() 


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!