X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=daklib%2Fthreadpool.py;h=5b17e3c496c5e99959badedc2c97402a5572eb5d;hb=e60e50250af1b4b9eaa6c5772c28d96a554284e4;hp=95a14a34de99218c97c2754418970d64fdb34a77;hpb=330a2a6041fc51b26ae19c795a059d888733d6da;p=dak.git diff --git a/daklib/threadpool.py b/daklib/threadpool.py index 95a14a34..5b17e3c4 100644 --- a/daklib/threadpool.py +++ b/daklib/threadpool.py @@ -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())