How to run Python Flask Application?

down angle photography of red clouds and blue sky
Photo by eberhard grossgasteiger on Pexels.com

I mostly use Python Flask when I need to develop a Web App or API.

Why? Because it is:

  • lightweight
  • Very Flexible
  • Micro-Service Friendly
  • Fast Development

These are one of the main reasons I choose Flask. But mostly I love to code with Flask. There are so many ways to run flask applications. I will write some of them here with code examples.

Let us assume a micro web application named mweb.py having code –

from flask import Flask

app = Flask(__name__)


@app.route("/")
def hello_world():
    return "<p>Hello, World!</p>"


if __name__ == "__main__":
    app.run(
        host="127.0.0.1",
        port=7557
    )

I can run this application with several ways.

Way 1: Run Flask application with flask command itself

$ flask run

or

$ python3 -m flask run

But both of them Will run with default flask port, which is 5000, instead of the port mentioned in the code. If we run this way, we can change the port by passing –host and –port parameter.

Way 2: Running the app.py with python3 or python itself

$ python3 app.py

This way, application will run if and only if you call the function app.run(). The host and port declared in the application will be used.

Way 3: Running flask app with Gunicorn

$ gunicorn app:app

This will run the application but default gunicorns host and port. We can change it by passing parameters.

We can also run with gunicorn using configuration file.

Gunicorn configuration can be written with a default file named gunicorn.conf.py

import multiprocessing

bind = "127.0.0.1:8778"
workers = multiprocessing.cpu_count() * 2 + 1

This configuration file is with python syntax.

$ gunicorn app:app -c gunicorn.conf.py

Way 4: Running flask app with uWSGI

$ uwsgi --http 127.0.0.1:3031 --wsgi-file app.py --callable app

We can also use a config file for uWSGI.

$ uwsgi --ini uwsgi.ini

uwsgi.ini

[uwsgi]
module = app:app

master = true
processes = 2
threads = 2

enable-threads = true


http = :9229

vacuum = true
die-on-term = true
harakiri = 200 # close process exceeding this time (seconds)


stats = :21913

logger = file:logfile=Logs/uwsgi.log,maxsize=1000000

This file is a good configuration running flask with uWSGI.

There are several more ways to run flask applications. I will update this post when I can arrange an exciting way about this. Thank you for reading.