A simple integration of a CherryPy web server, using Quixote template publishing, managed in its own thread.
Using CherryPy as a web server is a good move because it fixes problems on Windows shutting down a call to serve_forever. This example extends the CherryPy capability by running it in a seperate thread. Further extension comes from Quixote, for templating HTML.
One thing I like about this snippet of code is its simplicity. And the fact that it solves a large number of design problems, all in one shot.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
from BaseHTTPServer import * from cherrypy._cphttpserver import CherryHTTPServer from contrib.quixote.server.simple_server import HTTPRequestHandler from threading import Thread,Event class HTTPServerPlus(CherryHTTPServer, Thread): def __init__(self, **kwargs): CherryHTTPServer.__init__(self,**kwargs) Thread.__init__(self) def run(self): self.serve_forever() def join(self,timeout=None): self.shutdown() Thread.join(self, timeout) from contrib.quixote.publish import Publisher def create_publisher(): from quixote.demo.root import RootDirectory return Publisher(RootDirectory(), display_exceptions='plain') class TemplateServer(HTTPServerPlus): def __init__(self, port): HTTPServerPlus.__init__(self,server_address=('', port), RequestHandlerClass=HTTPRequestHandler) self.server_port = port self.server_name = 'My Local Server' create_publisher() self.start() if __name__=='__main__': server = TemplateServer(8800) try: while 1: pass except KeyboardInterrupt: print 'Got Ctrl-C...' server.join(1.0)
If you're trying to put together a web application in Python that needs to run on Windows, you need to deal with the matter of web server shutdown. The baseline Python experience for this is not good.
My needs were running quixote off a web server running in a separate thread on Windows. If your needs are similar, or you want to learn about integrating these technologies, this example may help you.