diff options
Diffstat (limited to 'fs/expose/serve/threadpool.py')
-rw-r--r-- | fs/expose/serve/threadpool.py | 58 |
1 files changed, 29 insertions, 29 deletions
diff --git a/fs/expose/serve/threadpool.py b/fs/expose/serve/threadpool.py index f448a12..5c2ecd5 100644 --- a/fs/expose/serve/threadpool.py +++ b/fs/expose/serve/threadpool.py @@ -10,48 +10,48 @@ def make_job(job_callable, *args, **kwargs): class _PoolThread(threading.Thread): """ Internal thread class that runs jobs. """ - + def __init__(self, queue, name): super(_PoolThread, self).__init__() self.queue = queue self.name = name - + def __str__(self): return self.name - + def run(self): - + while True: try: - _priority, job = self.queue.get() - except queue.Empty: + _priority, job = self.queue.get() + except queue.Empty: break - - if job is None: + + if job is None: break - + if callable(job): try: - job() + job() except Exception, e: - print e + print e self.queue.task_done() - + class ThreadPool(object): - + def __init__(self, num_threads, size=None, name=''): - + self.num_threads = num_threads self.name = name self.queue = queue.PriorityQueue(size) self.job_no = 0 - + self.threads = [_PoolThread(self.queue, '%s #%i' % (name, i)) for i in xrange(num_threads)] - + for thread in self.threads: thread.start() - + def _make_priority_key(self, i): no = self.job_no self.job_no += 1 @@ -62,38 +62,38 @@ class ThreadPool(object): def job(): return job_callable(*args, **kwargs) self.queue.put( (self._make_priority_key(1), job), True ) - return self.job_no - + return self.job_no + def flush_quit(self): - """ Quit after all tasks on the queue have been processed. """ + """ Quit after all tasks on the queue have been processed. """ for thread in self.threads: - self.queue.put( (self._make_priority_key(1), None) ) + self.queue.put( (self._make_priority_key(1), None) ) for thread in self.threads: thread.join() - + def quit(self): """ Quit as soon as possible, potentially leaving tasks on the queue. """ for thread in self.threads: - self.queue.put( (self._make_priority_key(0), None) ) + self.queue.put( (self._make_priority_key(0), None) ) for thread in self.threads: thread.join() if __name__ == "__main__": import time - + def job(n): print "Starting #%i" % n time.sleep(1) print "Ending #%i" % n - + pool = ThreadPool(5, 'test thread') - + for n in range(20): pool.job(job, n) - + pool.flush_quit() - -
\ No newline at end of file + + |