WSGI Middleware - Deepstash

WSGI Middleware

A WSGI middleware component is a Python callable that is itself a WSGI application, but may handle requests by delegating to other WSGI applications. These applications can themselves be WSGI middleware components.

A middleware component can perform such functions as:

  • Routing a request to different application objects based on the target URL, after changing the environment variables accordingly.
  • Allowing multiple applications or frameworks to run side-by-side in the same process.
  • Load balancing and remote processing, by forwarding requests and responses over a network.



The WSGI has two sides:

  • the server/gateway side. This is often running full web server software such as Apache or Nginx.
  • the application/framework side. This is a Python callable, supplied by the Python program or framework.

Between the server and the application, there may be one or more WSGI middleware components, which implement both sides of the API, typically in Python code.

WSGI does not specify how the Python interpreter should be started, nor how the application object should be loaded or configured, and different frameworks and webservers achieve this in different ways.


Why use WSGI and not just point a web server directly at an application?

  • WSGI gives you flexibility. Application developers can swap out web stack components for others. For example, a developer can switch from Green Unicorn to uWSGI without modifying the application or framework that implements WSGI.
  • WSGI servers promote scaling. Serving thousands of requests for dynamic content at once is the domain of WSGI servers. WSGI servers handle processing requests from the web server and deciding how to communicate those requests to an application framework's process.


Why is WSGI necessary?

A traditional web server does not understand or have any way to run Python applications. 

Therefore the Python community came up with WSGI as a standard interface that modules and containers could implement. WSGI is now the accepted approach for running Python web applications.

As shown in the above diagram, a WSGI server simply invokes a callable object on the WSGI application as defined by the PEP 3333 standard.

Some examples of WSGI servers are: Green Unicorn, uWSGI, mod_wsgi and CherryPy.


Deepstash helps you become inspired, wiser and productive, through bite-sized ideas from the best articles, books and videos out there.



  • Python is a general-purpose, object-oriented programming language.
  • It emphasises code readability by using white space.
  • It is easy to learn.
  • It is a favourite of programmers and developers.
  • Python is very well suited for use in machine learning at a large scale.
  • Its suite of specialised deep learning and machine learning libraries includes tools like scikit-learn, Keras and TensorFlow. It enables data scientists to develop sophisticated data models that plug directly into a production system.



Dynamic programming languages like Python and TypeScript allows developers to optionally define type annotations and benefit from the advantages of static typing such as better code completion, early bug detection.

However, retrofitting types is a cumbersome and error-prone process. To address this, we propose Type4Py , an ML-based type auto-completion for Python. It assists developers to gradually add type annotations to their codebases. In the following, I describe Type4Py’s pipeline, model, deployments, and the development of its VSCode extension and more.