Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Site updated at 2013-06-27 22:57:15 UTC

  • Loading branch information...
commit fdfc368c85a8f08662b36a32181e756979c98cb8 1 parent 6e0037f
@dcramer authored
View
27 2013/06/27/serving-python-web-applications/index.html
@@ -79,19 +79,14 @@ <h1 class="title">You Should Be Using Nginx + UWSGI</h1>
<h1>Serving Strategies</h1>
-<p>There&#8217;s quite a number of ways you can run a Python application. I&#8217;ll
-illustrate a few for you.</p>
+<p>There&#8217;s quite a number of ways you can run a Python application. I&#8217;m not going
+to include mod_wsgi, and most imporantly, I&#8217;m not trying to illustrate how
+evented models work. I don&#8217;t believe they&#8217;re practical (yet) in the Python
+world, so this topic is about a traditional threaded (or multi process) Python
+application.</p>
-<h2>mod_wsgi</h2>
-
-<p>Pretty straight forward. Install mod_wsgi with Apache, and either serve it
-embedded or use a wsgi daemon process.</p>
-
-<p>I&#8217;d say the daemon process is preferred, but due to the complexities of Apache
-I gave up on tuning this long ago.</p>
-
-<p>We&#8217;ll skip going into configuration methodologies for mod_wsgi, as it&#8217;s not
-the focus of this article.</p>
+<p>Instead, I&#8217;m going to focus on two of the most popular solutions, and two I&#8217;m
+very familiar with, gunicorn, and uwsgi.</p>
<h2>gunicorn</h2>
@@ -106,12 +101,8 @@ <h1 class="title">You Should Be Using Nginx + UWSGI</h1>
<p>It also has 10% of the configuration options as uwsgi (which might actually
be a good thing for some people).</p>
-<p>Generaly running gunicorn consists of maintaining a daemon process and proxying
-it through nginx or Apache.</p>
-
-<p>Gunicorn also supports various async models, but let&#8217;s be honest, evented models
-never work anywhere in Python, so unless you&#8217;re sitting in the fairytale land
-where they&#8217;re working, it provides you no advantages here.</p>
+<p>Other than that, it provides nearly identical base featuresets to uwsgi (or any
+other Python web server) for our comparative purposes.</p>
<h2>uwsgi</h2>
View
29 atom.xml
@@ -4,7 +4,7 @@
<title><![CDATA[David Cramer's Blog]]></title>
<link href="http://justcramer.com/atom.xml" rel="self"/>
<link href="http://justcramer.com/"/>
- <updated>2013-06-27T15:53:57-07:00</updated>
+ <updated>2013-06-27T15:56:54-07:00</updated>
<id>http://justcramer.com/</id>
<author>
<name><![CDATA[David Cramer]]></name>
@@ -26,19 +26,14 @@ and you&#8217;re able to get a lot of (relative) performance out of your threade
<h1>Serving Strategies</h1>
-<p>There&#8217;s quite a number of ways you can run a Python application. I&#8217;ll
-illustrate a few for you.</p>
+<p>There&#8217;s quite a number of ways you can run a Python application. I&#8217;m not going
+to include mod_wsgi, and most imporantly, I&#8217;m not trying to illustrate how
+evented models work. I don&#8217;t believe they&#8217;re practical (yet) in the Python
+world, so this topic is about a traditional threaded (or multi process) Python
+application.</p>
-<h2>mod_wsgi</h2>
-
-<p>Pretty straight forward. Install mod_wsgi with Apache, and either serve it
-embedded or use a wsgi daemon process.</p>
-
-<p>I&#8217;d say the daemon process is preferred, but due to the complexities of Apache
-I gave up on tuning this long ago.</p>
-
-<p>We&#8217;ll skip going into configuration methodologies for mod_wsgi, as it&#8217;s not
-the focus of this article.</p>
+<p>Instead, I&#8217;m going to focus on two of the most popular solutions, and two I&#8217;m
+very familiar with, gunicorn, and uwsgi.</p>
<h2>gunicorn</h2>
@@ -53,12 +48,8 @@ simple.</p>
<p>It also has 10% of the configuration options as uwsgi (which might actually
be a good thing for some people).</p>
-<p>Generaly running gunicorn consists of maintaining a daemon process and proxying
-it through nginx or Apache.</p>
-
-<p>Gunicorn also supports various async models, but let&#8217;s be honest, evented models
-never work anywhere in Python, so unless you&#8217;re sitting in the fairytale land
-where they&#8217;re working, it provides you no advantages here.</p>
+<p>Other than that, it provides nearly identical base featuresets to uwsgi (or any
+other Python web server) for our comparative purposes.</p>
<h2>uwsgi</h2>
View
2  categories/ci/atom.xml
@@ -4,7 +4,7 @@
<title><![CDATA[Category: ci | David Cramer's Blog]]></title>
<link href="http://justcramer.com/categories/ci/atom.xml" rel="self"/>
<link href="http://justcramer.com/"/>
- <updated>2013-06-27T15:53:57-07:00</updated>
+ <updated>2013-06-27T15:56:54-07:00</updated>
<id>http://justcramer.com/</id>
<author>
<name><![CDATA[David Cramer]]></name>
View
2  categories/disqus/atom.xml
@@ -4,7 +4,7 @@
<title><![CDATA[Category: disqus | David Cramer's Blog]]></title>
<link href="http://justcramer.com/categories/disqus/atom.xml" rel="self"/>
<link href="http://justcramer.com/"/>
- <updated>2013-06-27T15:53:57-07:00</updated>
+ <updated>2013-06-27T15:56:54-07:00</updated>
<id>http://justcramer.com/</id>
<author>
<name><![CDATA[David Cramer]]></name>
View
29 categories/django/atom.xml
@@ -4,7 +4,7 @@
<title><![CDATA[Category: django | David Cramer's Blog]]></title>
<link href="http://justcramer.com/categories/django/atom.xml" rel="self"/>
<link href="http://justcramer.com/"/>
- <updated>2013-06-27T15:53:57-07:00</updated>
+ <updated>2013-06-27T15:56:54-07:00</updated>
<id>http://justcramer.com/</id>
<author>
<name><![CDATA[David Cramer]]></name>
@@ -26,19 +26,14 @@ and you're able to get a lot of (relative) performance out of your threaded
<h1>Serving Strategies</h1>
-<p>There's quite a number of ways you can run a Python application. I'll
-illustrate a few for you.</p>
+<p>There's quite a number of ways you can run a Python application. I'm not going
+to include mod_wsgi, and most imporantly, I'm not trying to illustrate how
+evented models work. I don't believe they're practical (yet) in the Python
+world, so this topic is about a traditional threaded (or multi process) Python
+application.</p>
-<h2>mod_wsgi</h2>
-
-<p>Pretty straight forward. Install mod_wsgi with Apache, and either serve it
-embedded or use a wsgi daemon process.</p>
-
-<p>I'd say the daemon process is preferred, but due to the complexities of Apache
-I gave up on tuning this long ago.</p>
-
-<p>We'll skip going into configuration methodologies for mod_wsgi, as it's not
-the focus of this article.</p>
+<p>Instead, I'm going to focus on two of the most popular solutions, and two I'm
+very familiar with, gunicorn, and uwsgi.</p>
<h2>gunicorn</h2>
@@ -53,12 +48,8 @@ simple.</p>
<p>It also has 10% of the configuration options as uwsgi (which might actually
be a good thing for some people).</p>
-<p>Generaly running gunicorn consists of maintaining a daemon process and proxying
-it through nginx or Apache.</p>
-
-<p>Gunicorn also supports various async models, but let's be honest, evented models
-never work anywhere in Python, so unless you're sitting in the fairytale land
-where they're working, it provides you no advantages here.</p>
+<p>Other than that, it provides nearly identical base featuresets to uwsgi (or any
+other Python web server) for our comparative purposes.</p>
<h2>uwsgi</h2>
View
2  categories/git/atom.xml
@@ -4,7 +4,7 @@
<title><![CDATA[Category: git | David Cramer's Blog]]></title>
<link href="http://justcramer.com/categories/git/atom.xml" rel="self"/>
<link href="http://justcramer.com/"/>
- <updated>2013-06-27T15:53:57-07:00</updated>
+ <updated>2013-06-27T15:56:54-07:00</updated>
<id>http://justcramer.com/</id>
<author>
<name><![CDATA[David Cramer]]></name>
View
2  categories/heroku/atom.xml
@@ -4,7 +4,7 @@
<title><![CDATA[Category: heroku | David Cramer's Blog]]></title>
<link href="http://justcramer.com/categories/heroku/atom.xml" rel="self"/>
<link href="http://justcramer.com/"/>
- <updated>2013-06-27T15:53:57-07:00</updated>
+ <updated>2013-06-27T15:56:54-07:00</updated>
<id>http://justcramer.com/</id>
<author>
<name><![CDATA[David Cramer]]></name>
View
2  categories/howto/atom.xml
@@ -4,7 +4,7 @@
<title><![CDATA[Category: howto | David Cramer's Blog]]></title>
<link href="http://justcramer.com/categories/howto/atom.xml" rel="self"/>
<link href="http://justcramer.com/"/>
- <updated>2013-06-27T15:53:57-07:00</updated>
+ <updated>2013-06-27T15:56:54-07:00</updated>
<id>http://justcramer.com/</id>
<author>
<name><![CDATA[David Cramer]]></name>
View
2  categories/ops/atom.xml
@@ -4,7 +4,7 @@
<title><![CDATA[Category: ops | David Cramer's Blog]]></title>
<link href="http://justcramer.com/categories/ops/atom.xml" rel="self"/>
<link href="http://justcramer.com/"/>
- <updated>2013-06-27T15:53:57-07:00</updated>
+ <updated>2013-06-27T15:56:54-07:00</updated>
<id>http://justcramer.com/</id>
<author>
<name><![CDATA[David Cramer]]></name>
View
2  categories/osx/atom.xml
@@ -4,7 +4,7 @@
<title><![CDATA[Category: osx | David Cramer's Blog]]></title>
<link href="http://justcramer.com/categories/osx/atom.xml" rel="self"/>
<link href="http://justcramer.com/"/>
- <updated>2013-06-27T15:53:57-07:00</updated>
+ <updated>2013-06-27T15:56:54-07:00</updated>
<id>http://justcramer.com/</id>
<author>
<name><![CDATA[David Cramer]]></name>
View
2  categories/postgresql/atom.xml
@@ -4,7 +4,7 @@
<title><![CDATA[Category: postgresql | David Cramer's Blog]]></title>
<link href="http://justcramer.com/categories/postgresql/atom.xml" rel="self"/>
<link href="http://justcramer.com/"/>
- <updated>2013-06-27T15:53:57-07:00</updated>
+ <updated>2013-06-27T15:56:54-07:00</updated>
<id>http://justcramer.com/</id>
<author>
<name><![CDATA[David Cramer]]></name>
View
29 categories/python/atom.xml
@@ -4,7 +4,7 @@
<title><![CDATA[Category: python | David Cramer's Blog]]></title>
<link href="http://justcramer.com/categories/python/atom.xml" rel="self"/>
<link href="http://justcramer.com/"/>
- <updated>2013-06-27T15:53:57-07:00</updated>
+ <updated>2013-06-27T15:56:54-07:00</updated>
<id>http://justcramer.com/</id>
<author>
<name><![CDATA[David Cramer]]></name>
@@ -26,19 +26,14 @@ and you're able to get a lot of (relative) performance out of your threaded
<h1>Serving Strategies</h1>
-<p>There's quite a number of ways you can run a Python application. I'll
-illustrate a few for you.</p>
+<p>There's quite a number of ways you can run a Python application. I'm not going
+to include mod_wsgi, and most imporantly, I'm not trying to illustrate how
+evented models work. I don't believe they're practical (yet) in the Python
+world, so this topic is about a traditional threaded (or multi process) Python
+application.</p>
-<h2>mod_wsgi</h2>
-
-<p>Pretty straight forward. Install mod_wsgi with Apache, and either serve it
-embedded or use a wsgi daemon process.</p>
-
-<p>I'd say the daemon process is preferred, but due to the complexities of Apache
-I gave up on tuning this long ago.</p>
-
-<p>We'll skip going into configuration methodologies for mod_wsgi, as it's not
-the focus of this article.</p>
+<p>Instead, I'm going to focus on two of the most popular solutions, and two I'm
+very familiar with, gunicorn, and uwsgi.</p>
<h2>gunicorn</h2>
@@ -53,12 +48,8 @@ simple.</p>
<p>It also has 10% of the configuration options as uwsgi (which might actually
be a good thing for some people).</p>
-<p>Generaly running gunicorn consists of maintaining a daemon process and proxying
-it through nginx or Apache.</p>
-
-<p>Gunicorn also supports various async models, but let's be honest, evented models
-never work anywhere in Python, so unless you're sitting in the fairytale land
-where they're working, it provides you no advantages here.</p>
+<p>Other than that, it provides nearly identical base featuresets to uwsgi (or any
+other Python web server) for our comparative purposes.</p>
<h2>uwsgi</h2>
View
2  categories/sentry/atom.xml
@@ -4,7 +4,7 @@
<title><![CDATA[Category: sentry | David Cramer's Blog]]></title>
<link href="http://justcramer.com/categories/sentry/atom.xml" rel="self"/>
<link href="http://justcramer.com/"/>
- <updated>2013-06-27T15:53:57-07:00</updated>
+ <updated>2013-06-27T15:56:54-07:00</updated>
<id>http://justcramer.com/</id>
<author>
<name><![CDATA[David Cramer]]></name>
View
2  categories/solr/atom.xml
@@ -4,7 +4,7 @@
<title><![CDATA[Category: solr | David Cramer's Blog]]></title>
<link href="http://justcramer.com/categories/solr/atom.xml" rel="self"/>
<link href="http://justcramer.com/"/>
- <updated>2013-06-27T15:53:57-07:00</updated>
+ <updated>2013-06-27T15:56:54-07:00</updated>
<id>http://justcramer.com/</id>
<author>
<name><![CDATA[David Cramer]]></name>
View
2  disqus.xml
@@ -2,7 +2,7 @@
<feed xmlns="http://www.w3.org/2005/Atom">
<title>JustCramer</title>
<link href="http://justcramer.com/atom.xml" rel="self"/>
- <updated>2013-06-27T15:53:57-07:00</updated>
+ <updated>2013-06-27T15:56:54-07:00</updated>
<id>http://justcramer.com/</id>
View
2  django.xml
@@ -2,7 +2,7 @@
<feed xmlns="http://www.w3.org/2005/Atom">
<title>JustCramer</title>
<link href="http://justcramer.com/atom.xml" rel="self"/>
- <updated>2013-06-27T15:53:57-07:00</updated>
+ <updated>2013-06-27T15:56:54-07:00</updated>
<id>http://justcramer.com/</id>
View
2  feeds/disqus.xml
@@ -2,7 +2,7 @@
<feed xmlns="http://www.w3.org/2005/Atom">
<title>JustCramer</title>
<link href="http://justcramer.com/atom.xml" rel="self"/>
- <updated>2013-06-27T15:53:57-07:00</updated>
+ <updated>2013-06-27T15:56:54-07:00</updated>
<id>http://justcramer.com/</id>
View
2  feeds/django.xml
@@ -2,7 +2,7 @@
<feed xmlns="http://www.w3.org/2005/Atom">
<title>JustCramer</title>
<link href="http://justcramer.com/atom.xml" rel="self"/>
- <updated>2013-06-27T15:53:57-07:00</updated>
+ <updated>2013-06-27T15:56:54-07:00</updated>
<id>http://justcramer.com/</id>
View
27 index.html
@@ -83,19 +83,14 @@ <h1 class="title"><a href="/2013/06/27/serving-python-web-applications">You Shou
<h1>Serving Strategies</h1>
-<p>There&#8217;s quite a number of ways you can run a Python application. I&#8217;ll
-illustrate a few for you.</p>
+<p>There&#8217;s quite a number of ways you can run a Python application. I&#8217;m not going
+to include mod_wsgi, and most imporantly, I&#8217;m not trying to illustrate how
+evented models work. I don&#8217;t believe they&#8217;re practical (yet) in the Python
+world, so this topic is about a traditional threaded (or multi process) Python
+application.</p>
-<h2>mod_wsgi</h2>
-
-<p>Pretty straight forward. Install mod_wsgi with Apache, and either serve it
-embedded or use a wsgi daemon process.</p>
-
-<p>I&#8217;d say the daemon process is preferred, but due to the complexities of Apache
-I gave up on tuning this long ago.</p>
-
-<p>We&#8217;ll skip going into configuration methodologies for mod_wsgi, as it&#8217;s not
-the focus of this article.</p>
+<p>Instead, I&#8217;m going to focus on two of the most popular solutions, and two I&#8217;m
+very familiar with, gunicorn, and uwsgi.</p>
<h2>gunicorn</h2>
@@ -110,12 +105,8 @@ <h1 class="title"><a href="/2013/06/27/serving-python-web-applications">You Shou
<p>It also has 10% of the configuration options as uwsgi (which might actually
be a good thing for some people).</p>
-<p>Generaly running gunicorn consists of maintaining a daemon process and proxying
-it through nginx or Apache.</p>
-
-<p>Gunicorn also supports various async models, but let&#8217;s be honest, evented models
-never work anywhere in Python, so unless you&#8217;re sitting in the fairytale land
-where they&#8217;re working, it provides you no advantages here.</p>
+<p>Other than that, it provides nearly identical base featuresets to uwsgi (or any
+other Python web server) for our comparative purposes.</p>
<h2>uwsgi</h2>
Please sign in to comment.
Something went wrong with that request. Please try again.