def start(self, _strXmlInput): """ Launch EDNA with the given XML stream @param _strXmlInput: XML to be passed to the plugin @type _strXmlInput: python string representing the XML data structure """ if (_strXmlInput is None) or (_strXmlInput == "") : return #This is a trick to work-around bug #463: # Run the fist thread alone (delay the second, third, ...) # semaphore._Semaphore__value is the current value of the value, unfortunatly it is a protected value without getter # I need the value of the semaphore to guess if the current call is the first or not. # Nota semaphore are decreased in value from self.__iNbThreads to 0. When Zero, the semaphore is blocking. # Them all other, limited by the semaphore. if self.__bIsFirstExecute: sys.stdout.write("Waiting for first thread to initialize ....") while EDUtilsParallel.getNbRunning() > 0: time.sleep(0.5) sys.stdout.write(".") EDUtilsParallel.semaphoreNbThreadsAcquire() edPlugin = EDParallelExecute.__edFactoryPlugin.loadPlugin(self.__strPluginName) if (edPlugin is not None): edPlugin.setDataInput(_strXmlInput) edPlugin.connectSUCCESS(self.successPluginExecution) edPlugin.connectFAILURE(self.failurePluginExecution) edPlugin.execute() #edPlugin.executeSynchronous() else: EDUtilsParallel.semaphoreNbThreadsRelease() self.__bIsFirstExecute = False EDVerbose.screen("ERROR! Plugin not found : " + self.__strPluginName)
def preProcess(self, _edObject=None): """ preProcess of the plugin: Ensure a CPU resource is available for the processing by acquiring a semaphore """ EDVerbose.DEBUG("Acquire semaphore nbCPU by plugin %s, currently value: %s" % (self.getPluginName(), EDUtilsParallel.getSemaphoreValue())) EDUtilsParallel.semaphoreNbThreadsAcquire() EDPlugin.preProcess(self, _edObject)
def preProcess(self, _edObject=None): """ preProcess of the plugin: Ensure a CPU resource is available for the processing by acquiring a semaphore """ self.DEBUG("Acquire semaphore nbCPU by plugin %s" % self.getPluginName()) EDUtilsParallel.semaphoreNbThreadsAcquire() EDPlugin.preProcess(self, _edObject)
def preProcess(self, _edObject=None): """ preProcess of the plugin: Ensure a CPU resource is available for the processing by acquiring a semaphore """ EDVerbose.DEBUG( "Acquire semaphore nbCPU by plugin %s, currently value: %s" % (self.getPluginName(), EDUtilsParallel.getSemaphoreValue())) EDUtilsParallel.semaphoreNbThreadsAcquire() EDPlugin.preProcess(self, _edObject)
def semaphoreNbThreadsAcquire(self): """Method to acquire the semaphore that controls the number of threads running concurrently""" EDUtilsParallel.semaphoreNbThreadsAcquire()