Add support for Woodchuck.
[feedingit] / src / jobmanager.py
index 8ca4df8..42c7441 100644 (file)
@@ -40,7 +40,10 @@ class JobRunner(threading.Thread):
         have_lock = True
         self.job_manager.lock.acquire ()
         try:
-            while self.job_manager.pause == 0 and not self.job_manager.do_quit:
+            while (self.job_manager.pause == 0
+                   and not self.job_manager.do_quit
+                   and (len (self.job_manager.threads)
+                        <= self.job_manager.num_threads)):
                 try:
                     _, key, job = heapq.heappop (self.job_manager.queue)
                 except IndexError:
@@ -127,7 +130,7 @@ class _JobManager(object):
         self.started = started
 
         # The maximum number of threads to use for executing jobs.
-        self.num_threads = num_threads
+        self._num_threads = num_threads
 
         # List of jobs (priority, key, job) that are queued for
         # execution.
@@ -159,6 +162,13 @@ class _JobManager(object):
                 self.lock.release()
         return wrapper
 
+    def get_num_threads(self):
+        return self._num_threads
+    def set_num_threads(self, value):
+        self._num_threads = value
+        self.tickle ()
+    num_threads = property(get_num_threads, set_num_threads)
+
     @_lock
     def start(self):
         """