import threading from random import random from time import sleep class WorkerPool: def __init__(self, workers_number, target, worker_args): self._workers_number = workers_number self._target = target self._worker_args = worker_args self._workers = [] for i in range(self._workers_number): # sleep(random()) worker = threading.Thread(target=self._target, args=worker_args + (i,)) worker.start() self._workers.append(worker) def add_stoppers(self, q): for i in range(self._workers_number): q.put(None) def join_workers(self): for worker in self._workers: worker.join()