Re: improving performance of python webserver running python scripts in cgi-bin

2008-01-11 Thread Bruno Desthuilliers
Dale a écrit :
 I am using a simple python webserver (see code below) to serve up
 python scripts located in my cgi-bin directory.
 
 import BaseHTTPServer
 import CGIHTTPServer
 class Handler(CGIHTTPServer.CGIHTTPRequestHandler):
 cgi_directories = ['/cgi-bin']
 httpd = BaseHTTPServer.HTTPServer(('',8000), Handler)
 httpd.serve_forever()
 
 
 This works fine, but now I would like to combine the python scripts
 into the server program to eliminate starting the python interpreter
 on each script call.  I am new to python, and was wondering if there
 is a better techique that will be faster.
 
 Also, can someone reccommend an alternative approach to
 httpd.serve_forever().  I would like to perform other python functions
 (read a serial port, write to an Ethernet port, write to a file, etc.)
 inside the web server program above.  Is there an example of how to
 modify the code for an event loop style of operation where the program
 mostly performs my python I/O functions until an HTTP request comes
 in, and then it breaks out of the I/O operations to handle the HTTP
 request.
 
May I suggest that you take a look at more sophisticated solutions, like 
either wsgi, CherryPy or Twisted ?
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: improving performance of python webserver running python scripts in cgi-bin

2008-01-11 Thread Mike Meyer
On Thu, 10 Jan 2008 23:17:28 -0800 (PST) Dale [EMAIL PROTECTED] wrote:

 I am using a simple python webserver (see code below) to serve up
 python scripts located in my cgi-bin directory.
 
 import BaseHTTPServer
 import CGIHTTPServer
 class Handler(CGIHTTPServer.CGIHTTPRequestHandler):
 cgi_directories = ['/cgi-bin']
 httpd = BaseHTTPServer.HTTPServer(('',8000), Handler)
 httpd.serve_forever()
 
 
 This works fine, but now I would like to combine the python scripts
 into the server program to eliminate starting the python interpreter
 on each script call.  I am new to python, and was wondering if there
 is a better techique that will be faster.

You can use BaseHTTPRequestHandler and override do_GET to handle the
actual request.

 Also, can someone reccommend an alternative approach to
 httpd.serve_forever().  I would like to perform other python functions
 (read a serial port, write to an Ethernet port, write to a file, etc.)
 inside the web server program above.  Is there an example of how to
 modify the code for an event loop style of operation where the program
 mostly performs my python I/O functions until an HTTP request comes
 in, and then it breaks out of the I/O operations to handle the HTTP
 request.

Use poll/select/whatever to check if httpd.socket has data available,
and then invoke httpd.handle_request() when it does. Nothing else will
happen while the request is being handled.

The suggestion to check the various frameworks for doing async work is
a good one as well.

  mike
-- 
Mike Meyer [EMAIL PROTECTED]  http://www.mired.org/consulting.html
Independent Network/Unix/Perforce consultant, email for more information.
-- 
http://mail.python.org/mailman/listinfo/python-list