Both ‘pypy’ and ‘gevent’ are supposed to provide high performance. Pypy is supposedly faster than CPython, while gevent is based on co-routines and greenlets, which supposedly makes for a faster web server.

However, they’re not compatible with each other.

I’m wondering which setup is more efficient (in terms of speed/performance):

  • The builtin Flask server running on pypy

or:

  • The gevent server, running on CPython

The short answer is: It’s faster with PyPy, and it has higher concurrency with gevent.

It is possible to use gevent and PyPy simultaneously (we do this at PubNub for multiple projects) although it can be tricky. Starting with PyPy 2.2, a few patches are required to gevent on their socket implementation. We have an experimental branch on github for it: https://github.com/pubnub/gevent/tree/pypy-hacks – To be used in conjunction with pypycore.

Our recommendation? Use Flask with PyPy and gevent. Get the best of both worlds!

Pypy is compatible with Gevent +1.1 (http://www.gevent.org/changelog.html). It is also compatible with Python 3. So, why not using both? Pypy will improve processing perfomance while Gevent will help in IO bound tasks (e.g. database queries, web requests) by using underground asynchronous connections.

Builtin flask server is a BaseHTTPServer or so, never use. The best scenario is very likely tornado + pypy or something like that. Benchmark before using though. It also depends quite drastically on what you’re doing. The web server + web framework benchmarks are typically hello world kind of benchmarks. Is your application really like that?

Cheers, fijal