a bug in python windows service?

Gabriel Genellina gagsl-py2 at yahoo.com.ar
Sun May 27 11:25:15 EDT 2007


En Sun, 27 May 2007 09:07:36 -0300, momobear <wgwigw at gmail.com> escribió:

>> Instead of extending join(), write a specific method to signal the
>> quitEvent or just let the caller signal it. And I don't see in this
>> example why do you need two different events (one on the thread, another
>> on the service controller), a single event would suffice.
>
> I don't think a single event is enought, since I think the event
> python created and windows event are not same kind of event.

They are not the same object, of course (altough the threading.Event  
object relies eventually on a mutex implemented using CreateEvent). But in  
this case both can be successfully used; of course, having the Python  
object a more "pythonic" interfase (not a surprise!), it's easier to use.
The same example modified using only a threading.Event object (and a few  
messages to verify how it runs):

import threading
 from win32api import OutputDebugString as ODS

class workingthread(threading.Thread):
     def __init__(self, quitEvent):
         self.quitEvent = quitEvent
         self.waitTime = 1
         threading.Thread.__init__(self)

     def run(self):
         while not self.quitEvent.isSet():
             ODS("Running...\n")
             self.quitEvent.wait(self.waitTime)
         ODS("Exit run.\n")


import win32serviceutil
import win32event

class testTime(win32serviceutil.ServiceFramework):
     _svc_name_ = "testTime"
     _svc_display_name_ = "testTime"
     _svc_deps_ = ["EventLog"]

     def __init__(self, args):
         win32serviceutil.ServiceFramework.__init__(self, args)
         self.hWaitStop = threading.Event()
         self.thread = workingthread(self.hWaitStop)

     def SvcStop(self):
         self.hWaitStop.set()

     def SvcDoRun(self):
         self.thread.start()
         self.hWaitStop.wait()
         self.thread.join()

if __name__ == '__main__':
     win32serviceutil.HandleCommandLine(testTime)

-- 
Gabriel Genellina




More information about the Python-list mailing list