Nicholas Piël writes about Python web servers, asynchronous networking, ZeroMQ and some computer vision work.
HN links his benchmarks of Python web servers and async frameworks as a reference, one commenter calling the asynchronous one famous but dated, plus his ZeroMQ introduction.
Its not a high traffic site, but I'm running a app that served average of 5 req/s with Mongrel2 + wsgid + MySQL + django and thats working pretty well.
Also, the benchmark of Python web servers that gets linked everywhere (http://nichol.as/benchmark-of-python-web-servers) is getting old. I'm planning on doing a new benchmark, probably this coming weekend. As of now, I'm planning to test gunicorn, uWSGI, tornado, bjoern, eventlet, and gevent over HTTP, flup over FCGI, and uWSGI and wsgid over zeroMQ (behind Mongrel2). Thinking of it, I probably need to put all of the HTTP servers behind nginx for a more fair comparison. Am I forgetting any servers that people would like to see benchmarked?
I vote Gevent because of its speed, small resource footprint, and its simple synchronous-looking API, but be aware of its limitations. The greenlets (threads) spawned by gevent run in a single OS thread, so you won't be able to take full advantage of all the cores on your server with Gevent alone. Also, Greenlets run cooperatively meaning each one gains control of the CPU until it's done with its computation or hits an IO call. This is great for IO bound computation, not so much for CPU bound work. Even with these limitations, I still think it'll work well with in your application.
Check out this comparison of Python servers:
http://nichol.as/benchmark-of-python-web-servers
Mr. Shaw giving an "extreme talk" on using ZeroMQ, Advanced Network Architectures With ZeroMQ, should be interesting. For those that don't know ZeroMQ and why it's so useful, here's a few links:
http://nichol.as/zeromq-an-introduction
http://www.infoq.com/news/2010/09/introduction-zero-mq
http://www.igvita.com/2010/09/03/zeromq-modern-fast-networking-stack/
http://mongrel2.org/doc/tip/docs/manual/book.wiki#x1-640005.2 <== The Mongrel2 manual is probably the best concise introduction to ZeroMQ.
In reality, not that much. There's a pretty detailed benchmark breakdown here [1]. From my experience, the point where you see the different methods start to diverge is past the point you're going to be able to handle on a single box with a real-world application anyway. I find that gunicorn is slightly easier to setup (not requiring Apache to be installed, etc), so I've stuck with it. To each their own!
[1] http://nichol.as/benchmark-of-python-web-servers
There are at least 2 better http servers for Python, uWSGI and gEvent. Tornado is known to be slower: http://nichol.as/benchmark-of-python-web-servers . More specifically, uWSGI has been shown to respond at under 25ms with 15k+ concurrent connections.
Throw uWSGI behind Nginx (with it's new websocket support), tune it a bit, and I wouldn't be surprised to see it "pass" and perhaps even be competitive.
Yes, these are good as well...
ZeroMQ: Modern & Fast Networking Stack, by Ilya Grigorik
http://www.igvita.com/2010/09/03/zeromq-modern-fast-networking-stack/
ZeroMQ an Introduction, by Nicholas Piël
http://nichol.as/zeromq-an-introduction
Advanced Network Architectures with ZeroMQ, by Zed Shaw
http://blip.tv/pycon-us-videos-2009-2010-2011/pycon-2011-advanced-network-architectures-with-zeromq-4896861