import threading, Queue, signal class Task(object): def __init__(self): self.queue = Queue.Queue(0) def __worker(self): while True: item = self.queue.get() self.process(item) self.queue.task_done() def __start(self): thread = threading.Thread(target=self.__worker) thread.setDaemon(True) thread.start() def activate(self, threads): for thread in xrange(threads): self.__start() signal.signal(signal.SIGINT, signal.SIG_DFL) def put(self, item): self.queue.put(item) def wait(self): self.queue.join() def process(self, item): pass class task(Task): def __init__(self, func): Task.__init__(self) self.process = func