import WorkerThread class ThreadPool(object): mapWorkerThreads = {} activeWorkerThreads = [] inactiveWorkerThreads = [] mapPackageToCycle = {} listAvailableCyclicPackages = [] listBuildOptionPackages = [] pkgBuildOptionFile = "" pkgBuildType = "chroot" logger = None statusEvent = None @staticmethod def clear(): ThreadPool.mapWorkerThreads.clear() ThreadPool.activeWorkerThreads = [] ThreadPool.inactiveWorkerThreads = [] @staticmethod def getAllWorkerObjects(): listWorkerObjs = [] listWorkerKeys = ThreadPool.mapWorkerThreads.keys() for x in listWorkerKeys: xobj = ThreadPool.mapWorkerThreads[x] listWorkerObjs.append(xobj) return listWorkerObjs @staticmethod def addWorkerThread(workerThreadName): workerThread = WorkerThread.WorkerThread( ThreadPool.statusEvent, workerThreadName, ThreadPool.mapPackageToCycle, ThreadPool.listAvailableCyclicPackages, ThreadPool.logger, ThreadPool.listBuildOptionPackages, ThreadPool.pkgBuildOptionFile, ThreadPool.pkgBuildType) ThreadPool.mapWorkerThreads[workerThreadName] = workerThread @staticmethod def makeWorkerThreadActive(threadName): if threadName in ThreadPool.inactiveWorkerThreads: ThreadPool.inactiveWorkerThreads.remove(threadName) ThreadPool.activeWorkerThreads.append(threadName) @staticmethod def makeWorkerThreadInActive(threadName): if threadName in ThreadPool.activeWorkerThreads: ThreadPool.activeWorkerThreads.remove(threadName) ThreadPool.inactiveWorkerThreads.append(threadName) @staticmethod def startWorkerThread(threadName): ThreadPool.mapWorkerThreads[threadName].start() @staticmethod def getListInactiveWorkerThreads(): return ThreadPool.inactiveWorkerThreads @staticmethod def activateWorkerThreads(numOfThreadsToActivate): while len(ThreadPool.inactiveWorkerThreads) > 0 and numOfThreadsToActivate > 0: threadName = ThreadPool.inactiveWorkerThreads.pop() ThreadPool.addWorkerThread(threadName) ThreadPool.startWorkerThread(threadName) ThreadPool.makeWorkerThreadActive(threadName) numOfThreadsToActivate = numOfThreadsToActivate -1