Differences and uses between WSGI, CGI, FastCGI, and mod_python in regards to Python?
Question:
I’m just wondering what the differences and advantages are for the different CGI’s out there. Which one would be best for python scripts, and how would I tell the script what to use?
Answers:
A part answer to your question, including scgi.
- What's the difference between scgi and wsgi?
- Is there a speed difference between WSGI and FCGI?
- How Python web frameworks, WSGI and CGI fit together
CGI vs FCGI
Lazy and not writing it on my own. From the wikipedia: http://en.wikipedia.org/wiki/FastCGI
Instead of creating a new process for each request, FastCGI uses persistent processes to handle such requests. Multiple processes can configured, increasing stability and scalability. Each individual FastCGI process can handle many requests over its lifetime, thereby avoiding the overhead of per-request process creation and termination
There’s also a good background reader on CGI, WSGI and other options, in the form of an official python HOWTO: http://docs.python.org/2/howto/webservers.html
In a project like Django, you can use a WSGI (Web Server Gateway Interface) server from the Flup module.
A WSGI server wraps a back-end process using one or more protocols:
- FastCGI (calling a server process)
- SCGI (Simple Common Gateway Interface – a simpler FastCGI)
- AJP (Apache JServ Protocol – a Java FastCGI)
- mod_python (runs pre-loaded code per request – uses lots of RAM)
- CGI (Common Gateway Interface, starts a process per request – slow)
In 2019, WSGI was superseded by ASGI (Asynchronous Server Gateway Interface), used by frameworks like FastAPI on servers like Uvicorn, which is much faster.
- FastCGI is a kind of CGI which is long-live, which will always be running.
- With FastCGI, it’ll take less time.
- Because of multi-processes, FastCGI will cost more memory than CGI.
I’m just wondering what the differences and advantages are for the different CGI’s out there. Which one would be best for python scripts, and how would I tell the script what to use?
A part answer to your question, including scgi.
- What's the difference between scgi and wsgi?
- Is there a speed difference between WSGI and FCGI?
- How Python web frameworks, WSGI and CGI fit together
CGI vs FCGI
Lazy and not writing it on my own. From the wikipedia: http://en.wikipedia.org/wiki/FastCGI
Instead of creating a new process for each request, FastCGI uses persistent processes to handle such requests. Multiple processes can configured, increasing stability and scalability. Each individual FastCGI process can handle many requests over its lifetime, thereby avoiding the overhead of per-request process creation and termination
There’s also a good background reader on CGI, WSGI and other options, in the form of an official python HOWTO: http://docs.python.org/2/howto/webservers.html
In a project like Django, you can use a WSGI (Web Server Gateway Interface) server from the Flup module.
A WSGI server wraps a back-end process using one or more protocols:
- FastCGI (calling a server process)
- SCGI (Simple Common Gateway Interface – a simpler FastCGI)
- AJP (Apache JServ Protocol – a Java FastCGI)
- mod_python (runs pre-loaded code per request – uses lots of RAM)
- CGI (Common Gateway Interface, starts a process per request – slow)
In 2019, WSGI was superseded by ASGI (Asynchronous Server Gateway Interface), used by frameworks like FastAPI on servers like Uvicorn, which is much faster.
- FastCGI is a kind of CGI which is long-live, which will always be running.
- With FastCGI, it’ll take less time.
- Because of multi-processes, FastCGI will cost more memory than CGI.