from PackageBuilder import PackageBuilder import threading import Scheduler import ThreadPool class WorkerThread(threading.Thread): def __init__(self,event,name,mapPackageToCycle,listAvailableCyclicPackages,logger,listBuildOptionPackages,pkgBuildOptionFile): threading.Thread.__init__(self) self.statusEvent=event self.name=name self.mapPackageToCycle=mapPackageToCycle self.listAvailableCyclicPackages=listAvailableCyclicPackages self.logger=logger self.listBuildOptionPackages=listBuildOptionPackages self.pkgBuildOptionFile=pkgBuildOptionFile def run(self): buildThreadFailed=False ThreadPool.ThreadPool.makeWorkerThreadActive(self.name) self.logger.info("Thread "+self.name +" is starting now") while True: outputMap={} pkg = Scheduler.Scheduler.getNextPackageToBuild() if pkg is None: break self.logger.info("Thread "+self.name+" is building package:"+ pkg) pkgBuilder = PackageBuilder(self.mapPackageToCycle,self.listAvailableCyclicPackages,self.listBuildOptionPackages,self.pkgBuildOptionFile,"build-"+pkg) t = threading.Thread(target=pkgBuilder.buildPackageThreadAPI,args=(pkg,outputMap,pkg)) t.start() t.join() if outputMap.has_key(pkg): if outputMap[pkg] == False: buildThreadFailed = True Scheduler.Scheduler.notifyPackageBuildFailed(pkg) self.logger.info("Thread "+self.name +" stopped building the "+pkg +" package") break else: buildThreadFailed = True Scheduler.Scheduler.notifyPackageBuildFailed(pkg) self.logger.info("Thread "+self.name +" stopped building the "+pkg +" package") break Scheduler.Scheduler.notifyPackageBuildCompleted(pkg) if buildThreadFailed: self.statusEvent.set() ThreadPool.ThreadPool.makeWorkerThreadInActive(self.name) self.logger.info("Thread "+self.name +" is going to rest")