On May 20, 10:01 am, John Nagle <[EMAIL PROTECTED]> 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 > > [EMAIL PROTECTED] 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 -- http://mail.python.org/mailman/listinfo/python-list