mod_python performs several magnitudes slower than PHP?

Graham Dumpleton Graham.Dumpleton at gmail.com
Sat May 19 21:50:27 EDT 2007


On May 20, 10:01 am, John Nagle <n... at animats.com> wrote:
>     That's puzzling, because withmod_python, you're only invoking
> the compiler once per Apache restart.  With CGI programs, you pay
> the loading penalty on every request.
>
>                                 John Nagle
>
> chris.monsa... at gmail.com wrote:
> > Recently I've had to move my site to a new dedicated server running
> > FreeBSD 6.1. After installing apache 2.0.59, python 2.4.4 and
> >mod_python3.3.1, I decided to bench a script in PHP vs one in Python.
> > I found out that for some reason, mymod_pythonwas performing
> > extremely slow - magnitudes slower than it should. I scowered the
> > internet for hours and asked a few friends and still haven't been able
> > to find a solution to the problem.
>
> > frommod_pythonimport apache
>
> > def handler(req):
> >   for i in xrange(1000):
> >     print >> req, "Yeah"
> >   return apache.OK
>
> > and...
>
> > <?
> >   for ($i = 0; $i < 1000; $i++)
> >     echo "Yeah\n" ;
> > ?>
>
> > when I ran ab on both using 1000 requests and a concurrency of 10, i
> > got these results:
>
> > python- Requests per second:    21.37 [#/sec] (mean)
> > php- Requests per second:    1008.37 [#/sec] (mean)
>
> > Any ideas would really be appreciated... I'm on my last leg.

The original poster also asked the same question on the mod_python
mailing list. As pointed out there, the examples aren't equivalent as
the mod_python example would have resulted in data being flushed to
the client after every call to 'print'.

A more suitable example for comparison would have been:

  def handler(req):
   for i in xrange(1000):
     req.write('Yeah\n, 0)
   return apache.OK

The second argument of 0 to req.write() will allow Apache to buffer
data in an appropriate way and avoid lots of socket writes with small
amounts of data, plus avoid triggering of Apache's filter mechanism
every time.

Graham




More information about the Python-list mailing list