[pypy-dev] Playing with PyPy and Django

Omer Katz omer.drow at gmail.com
Sun Feb 8 13:09:32 CET 2015


Isn't there anything we can do about it?
We can open issues at the Django issue tracker if some code slows down
execution in PyPy.

2015-02-08 12:17 GMT+02:00 Maciej Fijalkowski <fijall at gmail.com>:

> Hi Tin
>
> I have a bit sad news for you, but essentially from what I looked at
> profling, the answer seems to be "don't use django, it has not been
> written with performance in mind". For example here (which features in
> django admin quite prominently, some stuff calls lazy() at each call):
> https://github.com/django/django/blob/master/django/utils/functional.py#L48
>
> What does it, per call that pypy does not like:
>
> * redefines classes
>
> * walks the class __mro__ and defines tons of new methods
>
> * proxies everything through a not so efficietn mechanisms
>
> Those things quite defy the purpose of the JIT - you're making tons of
> very dynamic things that pypy generally assumes is "static enough", if
> you wanted to do the same thing in C++, you would need to call gcc
> with each request, that would not be so much fun.
>
> If you really care about performance, consider swapping your web
> framework to something more performance-oriented where JIT compilation
> can help.
>
> As a side note, we (me and my company, not to be confused with PyPy
> open source project) do offer looking at proprietary code for
> benchmarking purposes as a commercial service, look at
> baroquesoftware.com
>
> Cheers,
> fijal
>
>
>
> On Sat, Feb 7, 2015 at 1:12 AM, Tin Tvrtković <tinchester at gmail.com>
> wrote:
> > Hello, PyPy folks!
> >
> > While trying to speed up one of my Django sites, I noticed a new version
> of
> > PyPy
> > had just been released. So I grabbed a fresh download of PyPy 3 (since
> this
> > is
> > a Python 3 codebase) and tried taking it out for a spin.
> >
> > However, as far as I can see, whatever I try PyPy is consistently slower
> > than
> > CPython for this.
> >
> > Since this is a proprietary site, I've basically ripped out all the code
> > except
> > my settings.py and my requirements; and am benchmarking the Django admin
> > index.
> > The results are about the same.
> >
> > I've set up a small repo that can be used to reproduce the environment:
> > https://github.com/Tinche/PyPy-Django-Playground. There's additional
> info in
> > the README there.
> >
> > These tests have been carried out on Ubuntu Trusty, 64-bit. CPython 3 is
> the
> > system Python, 3.4. PyPy has been downloaded from the official site and
> > unzipped.
> >
> > So what I basically do is set up an admin session, and use the Django
> main
> > admin
> > page. 200 warmup requests, then 100 benchmarked requests, look at the
> mean
> > request time.
> >
> > Some results:
> >
> > Django's runserver, DEBUG mode:
> >
> > PyPy3            485.389 [ms]
> > CPython 3.4      105.777 [ms]
> >
> > Django's runserver, no debug:
> >
> > PyPy3             44.661 [ms]
> > CPython 3.4       18.697 [ms]
> >
> > Gunicorn, 1 worker, no debug:
> >
> > PyPy3             28.615 [ms]
> > CPython 3.4       13.532 [ms]
> >
> > I don't exactly claim to be an expert on benchmarking, but assuming my
> site
> > is similar to the Django admin, CPython's gonna be giving me better
> > performance.
> > Also the debug runserver performance is kinda worrying. Nobody's going
> to be
> > running this in production, but it makes development a little slower and
> > more
> > annoying than it should be.
> >
> > Is there anything to make PyPy more competitive in these kinds of
> scenarios?
> >
> > Kind regards,
> > Tin
> > _______________________________________________
> > pypy-dev mailing list
> > pypy-dev at python.org
> > https://mail.python.org/mailman/listinfo/pypy-dev
> _______________________________________________
> pypy-dev mailing list
> pypy-dev at python.org
> https://mail.python.org/mailman/listinfo/pypy-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/pypy-dev/attachments/20150208/b5536da4/attachment.html>


More information about the pypy-dev mailing list