On 1 Feb 2007 11:24:13 -0800, Chris Curvey <[EMAIL PROTECTED]> wrote: > On Feb 1, 2:10 pm, Larry Bates <[EMAIL PROTECTED]> wrote: > > Chris Curvey wrote: > > > Hi all, > > > > > I have used the win32com libraries to set up a service called > > > MyService under Windows. So far, so good. Now I need to run multiple > > > copies of the service on the same machine. I also have that working. > > > For monitoring and logging, I'd like each instance of the service to > > > know it's own identity (MyService1, MyService2, etc.) > > > > > But I can't quite seem to grasp how to do this. In the code below, > > > the command line parameter "-i" gives the service an identity, but how > > > do I get the service to understand it's identity when it is started? > > > > > Many thanks! > > > > > class MyService(win32serviceutil.ServiceFramework): > > > """NT Service.""" > > > > > _svc_name_ = "MyService" > > > _svc_display_name_ = "My Service" > > > > > _id_ = '' > > > > > def SvcDoRun(self): > > > provider = MyServiceClass(identifier=self._id_) > > > provider.start() > > > > > # now, block until our event is set... > > > win32event.WaitForSingleObject(self.stop_event, > > > win32event.INFINITE) > > > > > # __init__ and SvcStop snipped > > > > > ########################################################################### > > > if __name__ == '__main__': > > > import optparse > > > parser = optparse.OptionParser() > > > parser.add_option("-i", "--identifier", dest="identifier") > > > (opts, args) = parser.parse_args() > > > if opts.number is not None: > > > MyService._svc_name_ += opts.identifier > > > MyService._svc_display_name_ += opts.identifier > > > MyService._provider_id_ = opts.identifier > > > > > win32serviceutil.HandleCommandLine(MyService, > > > customInstallOptions="i:") > > > > What is your use case for this? Why not make a single server > > process multiple providers (store them in a list or other > > container)? > > > > -Larry Bates > > The use case is that I have a queue of jobs that need to run. My > service connects to a central "distributor" server, which hands out > jobs to complete. I'd like to be able to run multiple copies of the > distributed service so that I can make the most use of each machine > where they run. (I'm not certain of the thread safety of some of the > libraries I'm using, so I'm leery of going the multi-threaded route) > Anyway, when my service gets a job to process, I'd like to know which > copy of the service is working on which job. So I want my log > messages to look like this: > > Job 123: Host: alpha Service: MyService A > Job 124: Host: alpha Service: MyService B > Job 124: Host: beta Service: MyService C > > Is that clear, or have I muddied the waters? >
Windows services are identified by name, so if you're running multiple services they will need to have unique _svc_name members. -- http://mail.python.org/mailman/listinfo/python-list