Any suggestions/improvements for the following custom thread-pool code?
import threading
from Queue import Queue
class Worker(threading.Thread):
def __init__(self, function, in_queue, out_queue):
self.function = function
self.in_queue, self.out_queue = in_queue, out_queue
super(Worker, self).__init__()
def run(self):
while True:
if self.in_queue.empty(): break
data = in_queue.get()
result = self.function(*data)
self.out_queue.put(result)
self.in_queue.task_done()
def process(data, function, num_workers=1):
in_queue = Queue()
for item in data:
in_queue.put(item)
out_queue = Queue(maxsize=in_queue.qsize())
workers = [Worker(function, in_queue, out_queue) for i in xrange(num_workers)]
for worker in workers:
worker.start()
in_queue.join()
while not out_queue.empty():
yield out_queue.get()
multiprocessing.pool.ThreadPoolobject, also explained here. \$\endgroup\$