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
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.