1. Home
  2. Python
  3. Using WSGI

Using WSGI

Overview

Python applications can be launched using Passenger offering improved throughput and lifecycle management. Launching CGI scripts wrapped by pyenv will yield very poor throughput as a result of multiple shell subprocesses necessary to ascertain the correct Python interpreter. Adapting a CGI application to WSGI improves throughput significantly by reducing overhead through a persistent process. Pages load quickly, and applications utilize resources efficiently.

Note: This KB requires a v6+ hosting platform.

Simple WSGI script

Prerequisite: First, follow the guide in Using multiple versions with Passenger to create a suitable directory structure.

Create a Passenger-compatible WSGI script named passenger_wsgi.py beneath the public/ folder. A single function, similar to main() in a C application, named application() is the entry-point for Passenger. Without this function and named file, Passenger cannot load your application. The below example is compatible with Python 3:

# Python 3-compatible version
import sys
ctr=0

def application(environ, start_response):
 global ctr
 start_response('200 OK', [('Content-Type', 'text/plain')])
 v = sys.version_info
 ctr+=1
 str = 'hello world from %d.%d.%d!n' % (v.major, v.minor, v.micro)
 return [bytes(str, 'UTF-8')]

Your directory structure should now look like:

.
├── passenger_wsgi.py
├── public/
├── .python-version
└── tmp/

.python-version is a file created by defining a Python version for the directory, e.g. pyenv local 3.3.5. Connect the public/ folder to a subdomain within the control panel under Web > Subdomains.

Application didn’t launch?

Check the Passenger launcher error log under /var/log/httpd/passenger.log. This is a combined logfile, so always remember to publish coherent, and flawless code!

Updated on April 20, 2020

Was this article helpful?

Related Articles

Need Support?
Can’t find the answer you’re looking for? Don’t worry we’re here to help! If you get an error, visit https://lithiumhosting.com/support instead.
Contact Support