def __init__(self, component): BaseHandler.__init__(self, component) # define a slave threadpool to handle messages self.threadpool = ThreadPool(\ "WMComponent.FeederManager.Handler.DefaultAddDatasetWatchSlave", \ self.component, 'AddDatasetWatch', \ self.component.config.FeederManager.maxThreads)
def __init__(self, component): BaseHandler.__init__(self, component) # Define a slave threadpool self.threadpool = ThreadPool(\ "WMComponent.WorkflowManager.Handler.AddToWorkflowManagementLocationListSlave", \ self.component, 'AddToWorkflowManagementLocationList', \ self.component.config.WorkflowManager.maxThreads)
def __init__(self, component): BaseHandler.__init__(self, component) # Define a slave threadpool self.threadpool = ThreadPool(\ "WMComponent.WorkflowManager.Handler.RemoveWorkflowFromManagementSlave", \ self.component, 'RemoveWorkflowFromManagement', \ self.component.config.WorkflowManager.maxThreads)
def __init__(self, component): BaseHandler.__init__(self, component) # Define a slave threadpool self.threadpool = ThreadPool(\ "WMComponent.WorkflowManager.Handler.AddWorkflowToManageSlave", \ self.component, 'AddWorkflowToManage', \ self.component.config.WorkflowManager.maxThreads)
def __init__(self, component): BaseHandler.__init__(self, component) # define a slave threadpool (this is optional # and depends on the developer deciding how he/she # wants to implement certain logic. self.nThreads = 5 self.threadpool = ThreadPool(\ "WMCore.WMSpec.Makers.Handlers.MakeJobSlave", \ self.component, 'MakeJob', \ self.nThreads) myThread = threading.currentThread() myThread.msgService.purgeMessages()
def testA(self): """ __testSubscribe__ Test subscription of a component. """ raise nose.SkipTest myThread = threading.currentThread() # create a 'fake' component that contains a arg dictionary. component = Dummy() # load default parameters. config = self.testInit.getConfiguration() # normally assigned by the harness of the test component. config.Agent.componentName = "TestComponent" component.config = config threadPools = [] for i in xrange(0, ThreadPoolTest._nrOfPools): threadPool = ThreadPool("WMCore.ThreadPool.ThreadSlave", \ component, 'MyPool_'+str(i), ThreadPoolTest._nrOfThreads) threadPools.append(threadPool) # this is how you would use the threadpool. The threadpool retrieves # events/payloads from the message service. If a thread is available # it is dispatched, otherwise it is stored in the trheadpool. # make the number of tasks bigger than number of threads to tesT # the persistent queue. for i in xrange(0, ThreadPoolTest._nrOfThreads * 10): event = 'eventNr_' + str(i) payload = 'payloadNr_' + str(i) # normally you would have different events per threadpool and # even different objects per pool. the payload part will be # pickled into the database enabling flexibility in passing # information. for j in xrange(0, ThreadPoolTest._nrOfPools): threadPools[j].enqueue(event, \ {'event' : event, 'payload' : payload}) # this commit you want to be in the agent harness, so the message is # actual removed from the msgService. we can do this as the threadpool # acts as a dispatcher and is a shortlived action: dispatch to thread # or queue and tell agent harness it is finished. finished = False timeout = 60 # secs currenttime = 0 while not finished: print('waiting for threads to finishs. Work left:') for j in xrange(0, ThreadPoolTest._nrOfPools): print('pool_' + str(j) + ':' + str(threadPools[j].callQueue)) time.sleep(1) finished = True currenttime += 1 if (timeout == currenttime): raise RuntimeError for j in xrange(0, ThreadPoolTest._nrOfPools): if (len(threadPools[j].resultsQueue) < ThreadPoolTest._nrOfThreads * 10): finished = False break # check if the tables are really empty and all messages # have been processed. for j in xrange(0, ThreadPoolTest._nrOfPools): assert len(threadPools[j].resultsQueue) == \ ThreadPoolTest._nrOfThreads*10 myThread.transaction.begin() for j in xrange(0, ThreadPoolTest._nrOfPools): self.assertEqual(threadPools[j].countMessages(), 0) myThread.transaction.commit()