HTTPServer, performance
Bill Scherer
Bill.Scherer at VerizonWireless.com
Tue Jan 2 18:12:43 EST 2001
Actually, I recently found the problem. It turns out that when creating
a multithreaded httpserver as I outlined, you get a deadlock in
BaseHTTPServer.BaseHTTPRequestHandler.log_request. Overriding this
method in my handler with:
def log_request:
pass
eliminates the lockups. Eventually I'll write a log method using a
queue and use another thread to handle the queue.
Bill
Dethe Elza wrote:
>
> Sounds like garbage collection behavior, at least in Java-land.
>
> There are lots of lightweight web servers out there, in Java and in Python.
> Might want
> to check out the code in one (or more) of those...
>
> --Dethe
>
> "Bill Scherer" <Bill.Scherer at VerizonWireless.com> wrote in message
> news:mailman.977951836.8921.python-list at python.org...
> > Hello eveyone, hope you had a nice holiday...
> >
> > Question: Is the code below the proper way to create a multi-threaded
> > http server in Python, and what kind of performance should one expect
> > out of it?
> >
> > The code below works. It's an extremely stripped down verison of my
> > current project which really runs under J(p)ython. I was unsatisfied
> > with performance, so I stripped out all that wasn't web server and tried
> > it under CPython and JPython.
> >
> > With the code below, CPython does about 12 tps on a dual 733 Mhz machine
> > under RedHat 6.2. JPython is only slightly slower (when using a JVM that
> > uses native threads and therefore both processors). Apache on the same
> > box does over 70 tps with a greater number of simulated users (100 vs
> > 25).
> >
> > One thing I do see with both CPython and JPython running this code is
> > random stalling. ie. The server will be happily serving requests, then
> > for no apparent reason, it justs stops. CPU load drops during the
> > stall, although it never gets very high. Two, maybe three, seconds
> > later, it resumes serving. Pings during this time show no change to
> > network latency (0.4ms).
> >
> > Any and all help is appreciated.
> >
> > Thanks!
> >
> > --------------------------------------------------------------------------
> ------
> >
> > import SocketServer, BaseHTTPServer
> >
> > PORT = 9777
> >
> > class HTTPServer(SocketServer.ThreadingMixIn,
> > BaseHTTPServer.HTTPServer):
> > pass
> >
> > class RequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
> > def do_GET(self):
> > self.send_response(200)
> > self.send_header("Content-type", 'text/plain')
> > self.end_headers()
> > self.wfile.write('hello world')
> > return
> >
> > if __name__ == '__main__':
> > httpd = HTTPServer(('', PORT), RequestHandler)
> > print 'serving on port', PORT
> > httpd.serve_forever()
> >
> >
> > --
> > William K. Scherer
> > Sr. Member of Applications Staff - Verizon Wireless
> > Bill.Scherer_at_VerizonWireless.com
> >
>
> --
> http://www.python.org/mailman/listinfo/python-list
--
William K. Scherer
Sr. Member of Applications Staff - Verizon Wireless
Bill.Scherer_at_VerizonWireless.com
More information about the Python-list
mailing list