| ... | ... |
@@ -207,12 +207,15 @@ class PackageManager(object): |
| 207 | 207 |
return False |
| 208 | 208 |
|
| 209 | 209 |
ThreadPool.clear() |
| 210 |
+ ThreadPool.mapPackageToCycle=self.mapPackageToCycle |
|
| 211 |
+ ThreadPool.listAvailableCyclicPackages=self.listAvailableCyclicPackages |
|
| 212 |
+ ThreadPool.logger=self.logger |
|
| 213 |
+ ThreadPool.statusEvent=statusEvent |
|
| 210 | 214 |
i=0 |
| 211 | 215 |
while i < numWorkerThreads: |
| 212 | 216 |
workerName="WorkerThread"+str(i) |
| 213 |
- w = WorkerThread(statusEvent,workerName,self.mapPackageToCycle,self.listAvailableCyclicPackages,self.logger) |
|
| 214 |
- ThreadPool.addWorkerThread(workerName, w) |
|
| 215 |
- w.start() |
|
| 217 |
+ ThreadPool.addWorkerThread(workerName) |
|
| 218 |
+ ThreadPool.startWorkerThread(workerName) |
|
| 216 | 219 |
i = i + 1 |
| 217 | 220 |
|
| 218 | 221 |
statusEvent.wait() |
| ... | ... |
@@ -1,4 +1,4 @@ |
| 1 |
-from ThreadPool import ThreadPool |
|
| 1 |
+import ThreadPool |
|
| 2 | 2 |
from constants import constants |
| 3 | 3 |
from Logger import Logger |
| 4 | 4 |
import threading |
| ... | ... |
@@ -94,7 +94,7 @@ class Scheduler(object): |
| 94 | 94 |
package=Scheduler.listOfPackagesNextToBuild.pop(0) |
| 95 | 95 |
|
| 96 | 96 |
if len(Scheduler.listOfPackagesNextToBuild) > 0: |
| 97 |
- ThreadPool.activateWorkerThreads(len(Scheduler.listOfPackagesNextToBuild)) |
|
| 97 |
+ ThreadPool.ThreadPool.activateWorkerThreads(len(Scheduler.listOfPackagesNextToBuild)) |
|
| 98 | 98 |
Scheduler.logger.info("Released scheduler lock")
|
| 99 | 99 |
Scheduler.lock.release() |
| 100 | 100 |
Scheduler.listOfPackagesCurrentlyBuilding.append(package) |
| ... | ... |
@@ -1,9 +1,14 @@ |
| 1 | 1 |
|
| 2 |
+import WorkerThread |
|
| 2 | 3 |
class ThreadPool(object): |
| 3 | 4 |
|
| 4 | 5 |
mapWorkerThreads={}
|
| 5 | 6 |
activeWorkerThreads=[] |
| 6 | 7 |
inactiveWorkerThreads=[] |
| 8 |
+ mapPackageToCycle={}
|
|
| 9 |
+ listAvailableCyclicPackages=[] |
|
| 10 |
+ logger=None |
|
| 11 |
+ statusEvent=None |
|
| 7 | 12 |
|
| 8 | 13 |
@staticmethod |
| 9 | 14 |
def clear(): |
| ... | ... |
@@ -21,7 +26,8 @@ class ThreadPool(object): |
| 21 | 21 |
return listWorkerObjs |
| 22 | 22 |
|
| 23 | 23 |
@staticmethod |
| 24 |
- def addWorkerThread(workerThreadName,workerThread): |
|
| 24 |
+ def addWorkerThread(workerThreadName): |
|
| 25 |
+ workerThread = WorkerThread.WorkerThread(ThreadPool.statusEvent,workerThreadName,ThreadPool.mapPackageToCycle,ThreadPool.listAvailableCyclicPackages,ThreadPool.logger) |
|
| 25 | 26 |
ThreadPool.mapWorkerThreads[workerThreadName]=workerThread |
| 26 | 27 |
|
| 27 | 28 |
@staticmethod |
| ... | ... |
@@ -48,6 +54,7 @@ class ThreadPool(object): |
| 48 | 48 |
def activateWorkerThreads(numOfThreadsToActivate): |
| 49 | 49 |
while len(ThreadPool.inactiveWorkerThreads) > 0 and numOfThreadsToActivate > 0: |
| 50 | 50 |
threadName=ThreadPool.inactiveWorkerThreads.pop() |
| 51 |
+ ThreadPool.addWorkerThread(threadName) |
|
| 51 | 52 |
ThreadPool.startWorkerThread(threadName) |
| 52 | 53 |
ThreadPool.makeWorkerThreadActive(threadName) |
| 53 | 54 |
numOfThreadsToActivate = numOfThreadsToActivate -1 |
| ... | ... |
@@ -1,8 +1,8 @@ |
| 1 | 1 |
from PackageBuilder import PackageBuilder |
| 2 | 2 |
import threading |
| 3 |
-from Scheduler import Scheduler |
|
| 3 |
+import Scheduler |
|
| 4 | 4 |
from constants import constants |
| 5 |
-from ThreadPool import ThreadPool |
|
| 5 |
+import ThreadPool |
|
| 6 | 6 |
|
| 7 | 7 |
class WorkerThread(threading.Thread): |
| 8 | 8 |
|
| ... | ... |
@@ -17,11 +17,11 @@ class WorkerThread(threading.Thread): |
| 17 | 17 |
|
| 18 | 18 |
def run(self): |
| 19 | 19 |
buildThreadFailed=False |
| 20 |
- ThreadPool.makeWorkerThreadActive(self.name) |
|
| 20 |
+ ThreadPool.ThreadPool.makeWorkerThreadActive(self.name) |
|
| 21 | 21 |
self.logger.info("Thread "+self.name +" is starting now")
|
| 22 | 22 |
while True: |
| 23 | 23 |
outputMap={}
|
| 24 |
- pkg = Scheduler.getNextPackageToBuild() |
|
| 24 |
+ pkg = Scheduler.Scheduler.getNextPackageToBuild() |
|
| 25 | 25 |
if pkg is None: |
| 26 | 26 |
break |
| 27 | 27 |
self.logger.info("Thread "+self.name+" is building package:"+ pkg)
|
| ... | ... |
@@ -32,21 +32,21 @@ class WorkerThread(threading.Thread): |
| 32 | 32 |
if outputMap.has_key(pkg): |
| 33 | 33 |
if outputMap[pkg] == False: |
| 34 | 34 |
buildThreadFailed = True |
| 35 |
- Scheduler.notifyPackageBuildFailed(pkg) |
|
| 35 |
+ Scheduler.Scheduler.notifyPackageBuildFailed(pkg) |
|
| 36 | 36 |
self.logger.info("Thread "+self.name +" stopped building the "+pkg +" package")
|
| 37 | 37 |
break |
| 38 | 38 |
else: |
| 39 | 39 |
buildThreadFailed = True |
| 40 |
- Scheduler.notifyPackageBuildFailed(pkg) |
|
| 40 |
+ Scheduler.Scheduler.notifyPackageBuildFailed(pkg) |
|
| 41 | 41 |
self.logger.info("Thread "+self.name +" stopped building the "+pkg +" package")
|
| 42 | 42 |
break |
| 43 | 43 |
|
| 44 |
- Scheduler.notifyPackageBuildCompleted(pkg) |
|
| 44 |
+ Scheduler.Scheduler.notifyPackageBuildCompleted(pkg) |
|
| 45 | 45 |
|
| 46 | 46 |
if buildThreadFailed: |
| 47 | 47 |
self.statusEvent.set() |
| 48 | 48 |
|
| 49 |
- ThreadPool.makeWorkerThreadInActive(self.name) |
|
| 49 |
+ ThreadPool.ThreadPool.makeWorkerThreadInActive(self.name) |
|
| 50 | 50 |
self.logger.info("Thread "+self.name +" is going to rest")
|
| 51 | 51 |
|
| 52 | 52 |
|