When I first started benchmarking one of my Django sites, http://trip-travel.ru/ (using postgres driver pypq), I was disappointed by the results. PyPy was visually much slower than cPython (I just looked at how the site loads in the browser)

But today I got some incredible results, I finally made PyPy to work faster than cPython, and found out that it got faster after loading the page several hundred times with "ab" or "siege"

Here a the results, of mean response time by querying the home page with apache's "ab" (cPython 2.7.2, Django 1.3, PyPy 1.6.0), served with cherrypy wsgi server:

After 10 requests (excluding the first request):
cPython - 163.529 ms
PyPy - 460.879 ms

50 request more:
cPython - 168.539
PyPy - 249.850

100 requests more:
cPython - 166.278 ms
PyPy - 131.104

100 requests more:
cPython - 165.820
PyPy - 115.446

300 requests more:
cPython - 165.543
PyPy - 107.636

300 requests more:
cPython - 166.425
PyPy - 103.065

As we can see, the JIT needs much time to warm up, but when it does, the result is pretty noticeable. By the way, with psycopg2, the site responds for 155.766 ms in average (only 10 ms faster), so using PyPy with Django makes much sense for me.

As for now, pypy cannot run with uWSGI, which I use in production, but maybe i'll switch to PyPy for production deployments if "PyPy + PyPQ + Some pure python WSGI server" suite will outperform (uWSGI + cPython + psycopg2). Though, the need to load the page 500 times after each server reload is not comfortable.
<http://trip-travel.ru/>
_______________________________________________
pypy-dev mailing list
pypy-dev@python.org
http://mail.python.org/mailman/listinfo/pypy-dev

Reply via email to