]> git.decadent.org.uk Git - dak.git/blobdiff - daklib/threadpool.py
Port bts_categorize to python-debianbts
[dak.git] / daklib / threadpool.py
index 95a14a34de99218c97c2754418970d64fdb34a77..5b17e3c496c5e99959badedc2c97402a5572eb5d 100644 (file)
@@ -1,16 +1,13 @@
 import threading
 from time import sleep
 
+from daklib.config import Config
+
 # This code is a modified copy of
 # http://code.activestate.com/recipes/203871-a-generic-programming-thread-pool/
 # and is licensed under the Python License. The full text of the license
 # is available in the file COPYING-PSF.
 
-# FIXME:
-# numThreads defaults to 16 in __init__ to work best on
-# franck.debian.org but the default value should be specified in
-# dak.conf
-
 # Ensure booleans exist (not needed for Python 2.2.1 or higher)
 try:
     True
@@ -18,16 +15,25 @@ except NameError:
     False = 0
     True = not False
 
+if Config().has_key('Common::ThreadCount'):
+    defaultThreadCount = int(Config()['Common::ThreadCount'])
+else:
+    defaultThreadCount = 1
+
 class ThreadPool:
 
     """Flexible thread pool class.  Creates a pool of threads, then
-    accepts tasks that will be dispatched to the next available
-    thread."""
+    accepts tasks that will be dispatched to the next available thread.
+    The argument numThreads defaults to 'Common::ThreadCount' which must
+    be specified in dak.conf."""
 
-    def __init__(self, numThreads = 16):
+    def __init__(self, numThreads = 0):
 
         """Initialize the thread pool with numThreads workers."""
 
+        if numThreads == 0:
+            numThreads = defaultThreadCount
+
         self.__threads = []
         self.__resizeLock = threading.Condition(threading.Lock())
         self.__taskLock = threading.Condition(threading.Lock())