[Twisted-Python] Sample Twisted Web NT Service

Thad Jacobs tjacobs at kinematic.com
Wed Mar 5 15:20:58 MST 2003


#This sample code demonstrates how to mount Twisted Web as a 
#Windows XP / 2000 / NT Service using win32all's win32service

import win32serviceutil
import win32service
import win32event
class TwistedWebNTService(win32serviceutil.ServiceFramework):
   _svc_name_ = "TwistedWebNTService"
   _svc_display_name_ = "Twisted Web NT Service"
   def __init__(self, args):
     win32serviceutil.ServiceFramework.__init__(self, args)
     self.hWaitStop = win32event.CreateEvent(None, 0, 0, None)

   def SvcStop(self):
     self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
     win32event.SetEvent(self.hWaitStop)

   def SvcDoRun(self):
     from twisted.python.log import startLogging
     # we don't have the console, so we log somewhere
     # the NT service logging facilities probably isn't the right place
     startLogging(open('c:/twistedwebNTService.log','a'))
     self.CheckForQuit()
     startTwisted()

   def CheckForQuit(self):
     from twisted.internet import reactor
     #print "Check For Quit"
     rv = win32event.WaitForSingleObject(self.hWaitStop, 10.0)
     if not rv == win32event.WAIT_TIMEOUT:
       print "Received Quit from Win32"
       reactor.stop()
     reactor.callLater(1.0, self.CheckForQuit)

def startTwisted():
   from twisted.internet.app import Application
   app = Application("web")
   from twisted.web import server, static, twcgi, script, trp
   root = static.File("c:\\web") #Serve files out of c:\\web

  #Add the appropriate processors if you want to serve scripts
   root.processors = {
            '.cgi': twcgi.CGIScript,
            '.php3': twcgi.PHP3Script,
            '.php': twcgi.PHPScript,
            '.epy': script.PythonScript,
            '.rpy': script.ResourceScript,
            '.trp': trp.ResourceUnpickler,
            }
   
   site = server.Site(root)

   app.listenTCP(8080, site)

   app.run(save=0)
   print "Finished"

if __name__=='__main__':
   # you could call startTwisted to run as not-a-service
   # or use it for cross-platform reasons
   win32serviceutil.HandleCommandLine(TwistedWebNTService)




More information about the Twisted-Python mailing list