import WorkerThread
class ThreadPool(object):
mapWorkerThreads = {}
activeWorkerThreads = []
inactiveWorkerThreads = []
mapPackageToCycle = {}
pkgBuildType = "chroot"
logger = None
statusEvent = None
@staticmethod
def clear():
ThreadPool.mapWorkerThreads.clear()
ThreadPool.activeWorkerThreads = []
ThreadPool.inactiveWorkerThreads = []
@staticmethod
def addWorkerThread(workerThreadName):
workerThread = WorkerThread.WorkerThread(
ThreadPool.statusEvent,
workerThreadName,
ThreadPool.mapPackageToCycle,
ThreadPool.logger,
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 ThreadPool.inactiveWorkerThreads and numOfThreadsToActivate > 0:
threadName = ThreadPool.inactiveWorkerThreads.pop()
ThreadPool.addWorkerThread(threadName)
ThreadPool.startWorkerThread(threadName)
ThreadPool.makeWorkerThreadActive(threadName)
numOfThreadsToActivate = numOfThreadsToActivate -1
@staticmethod
def join_all():
for p in ThreadPool.mapWorkerThreads.values():
p.join()