I have created a quixote program which I like to run as service on windows
machine using either medusa or twisted matrix as web server.
I am having trouble with both of them. Am I missing something or I have to run
it with IIS or Apache?
When I run quixote.demo (quixote 0.7a3) with medusa server as a win32 service as
follows:
import win32serviceutil
import win32service
import win32event
class motorService(win32serviceutil.ServiceFramework):
_svc_name_ = "motorService"
_svc_display_name_ = "The Motor Service"
def __init__(self, args):
win32serviceutil.ServiceFramework.__init__(self, args)
#self.hWaitStop = win32event.CreateEvent(None, 0, 0, None)
def SvcStop(self):
pass
# self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
# win32event.SetEvent(self.hWaitStop)
def SvcDoRun(self):
import asyncore
from quixote.server.medusa_http import http_server, QuixoteHandler
from quixote import enable_ptl
from quixote.publish import Publisher
enable_ptl()
server = http_server.http_server('', 80)
publisher = Publisher('quixote.demo')
publisher.setup_logs()
dh = QuixoteHandler(publisher, 'Quixote/demo', server)
server.install_handler(dh)
asyncore.loop()
#win32event.WaitForSingleObject(self.hWaitStop, win32event.INFINITE)
if __name__=='__main__':
win32serviceutil.HandleCommandLine(motorService)
**********************************************
It runs for some time and then stop running with following error in eventlog:
Event Type: Error
Event Source: Python Service
Event Category: None
Event ID: 3
Date: 3/28/2004
Time: 10:20:51 PM
User: N/A
Computer: RCPORTABLE
Description:
The instance's SvcRun() method failed
File "C:\Python23\lib\site-packages\win32\lib\win32serviceutil.py", line 670,
in SvcRun
self.SvcDoRun()
File "C:\Python23\service\motorServiceMedusa.py", line 29, in SvcDoRun
asyncore.loop()
File "C:\Python23\lib\asyncore.py", line 193, in loop
poll_fun(timeout, map)
File "C:\Python23\lib\asyncore.py", line 125, in poll
write(obj)
File "C:\Python23\lib\asyncore.py", line 81, in write
obj.handle_error()
File "c:\python23\Lib\site-packages\medusa\http_server.py", line 429, in
handle_error
asynchat.async_chat.handle_error (self)
File "C:\Python23\lib\asyncore.py", line 418, in handle_error
'error'
File "C:\Python23\lib\asyncore.py", line 376, in log_info
print '%s: %s' % (type, message)
exceptions.IOError: (9, 'Bad file descriptor')
********************************************************************************
******************
When I run with twisted as follows:
import win32serviceutil
import win32service
import win32event
class motorService(win32serviceutil.ServiceFramework):
_svc_name_ = "motorService"
_svc_display_name_ = "The Motor Service"
def __init__(self, args):
win32serviceutil.ServiceFramework.__init__(self, args)
#self.hWaitStop = win32event.CreateEvent(None, 0, 0, None)
def SvcStop(self):
pass
# self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
# win32event.SetEvent(self.hWaitStop)
def SvcDoRun(self):
from twisted.internet.app import Application
from quixote.server.twisted_http import QuixoteFactory
import quixote
quixote.enable_ptl()
from quixote.publish import Publisher
from twisted.python.log import startLogging
startLogging(open('c:/twistedexample.log','a'))
import quixote.demo
http_port = 80
namespace = quixote.demo
app = Application('Quixote')
publisher = Publisher(namespace)
qf = QuixoteFactory(publisher)
app.listenTCP(http_port, qf)
app.run(save=0)
I got following error in twisted log file. I can not run demo at all using
twisted.
2004/03/28 22:19 Eastern Standard Time [-] Log opened.
2004/03/28 22:19 Eastern Standard Time [-]
C:\Python23\service\motorService.py:30: exceptions.DeprecationWarning:
twisted.internet.app is deprecated, use twisted.application or the reactor
instead.
2004/03/28 22:19 Eastern Standard Time [*Quixote*]
quixote.server.twisted_http.QuixoteFactory starting on 80
2004/03/28 22:19 Eastern Standard Time [*Quixote*] Starting factory
2004/03/28 22:19 Eastern Standard Time [*Quixote*] Traceback (most recent call
last):
File "C:\Python23\lib\site-packages\win32\lib\win32serviceutil.py", line 670,
in SvcRun
self.SvcDoRun()
File "C:\Python23\service\motorService.py", line 34, in SvcDoRun
app.run(save=0)
File "C:\Python23\Lib\site-packages\twisted\internet\app.py", line 873, in
run
log.callWithLogger(self, reactor.run,
installSignalHandlers=installSignalHandlers)
--- ---
File "C:\Python23\Lib\site-packages\twisted\python\log.py", line 65, in
callWithLogger
callWithContext({"system": lp}, func, *args, **kw)
File "C:\Python23\Lib\site-packages\twisted\python\log.py", line 52, in
callWithContext
return context.call({ILogContext: newCtx}, func, *args, **kw)
File "C:\Python23\Lib\site-packages\twisted\python\context.py", line 32, in
callWithContext
return func(*args,**kw)
File "C:\Python23\Lib\site-packages\twisted\internet\default.py", line 124,
in run
self.startRunning(installSignalHandlers=installSignalHandlers)
File "C:\Python23\Lib\site-packages\twisted\internet\default.py", line 120,
in startRunning
self._handleSignals()
File "C:\Python23\Lib\site-packages\twisted\internet\default.py", line 92, in
_handleSignals
signal.signal(signal.SIGINT, self.sigInt)
exceptions.ValueError: signal only works in main thread