En Mon, 18 Jun 2007 00:25:25 -0300, <[EMAIL PROTECTED]> escribió: > I'm trying to serve up a simple XMLRPC server as a windows service. I > got it to run properly, I'm just not sure how to stop it properly. > Most of the documentation/examples I found for this was from forums, > so I'd love some links to relevant info also. Here's what I > have...taken from the cookbook with the xmlrpc server added: > > def __init__(self, args): > win32serviceutil.ServiceFramework.__init__(self, args) > # Create an event which we will use to wait on. > # The "service stop" request will set this event. > self.hWaitStop = win32event.CreateEvent(None, 0, 0, None) > > def SvcStop(self): > # Before we do anything, tell the SCM we are starting the stop > process. > self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING) > > # quit the xmlrpc sever > self.server.quit()
What is quit()? As the server may be processing a request I'd move any finalization code below, after exiting the while loop. > > # And set my event. > win32event.SetEvent(self.hWaitStop) > > def SvcDoRun(self): > # Serve up the XMLRPC forever > self.server = > SimpleXMLRPCServer.SimpleXMLRPCServer(("10.0.1.6", 8000)) > self.server.register_instance(MyClass()) > self.server.serve_forever() > > win32event.WaitForSingleObject(self.hWaitStop) The simplest solution is to replace serve_forever with a loop waiting on hWaitStop: while WaitForSingleObject(self.hWaitStop, 0)==WAIT_TIMEOUT: self.server.handle_request() Set the socket timeout to a reasonable value (you'll have to wait that time before exiting). Also, a ThreadingTCPServer may be better if you expect more than a request at a time. If you search past messages you may find other ways. -- Gabriel Genellina -- http://mail.python.org/mailman/listinfo/python-list