This implementation details a queue of functions, it will be executed depending of the number of threads if number of threads is one, it be a queue of executions.
Implementation
import queue import threading class Process(object): def _get_function(self): return self.__function def _set_function(self, value): if not callable(value): raise TypeError("function must be callable") self.__function = value __function = None function = property(_get_function, _set_function) def _get_params(self): return self.__params def _set_params(self, value): if type(value) is not list: raise TypeError("params must be a list of parameters") self.__params = value __params = None params = property(_get_params, _set_params) def __repr__(self): return str(self.params) + str(self.function) class MultithreadQueue(object): def __init__(self, thread_number=10, callback_insert=None, callback_get=None): self._queue = queue.Queue() self.threads = [] self._cb_insert = callback_insert self._cb_get = callback_get for i in range(thread_number): t = threading.Thread(target=self.run) t.start() self.threads.append(t) def append(self, function, params): p = Process() p.function = function p.params = params self._queue.put(p) def run(self): while True: element = self._queue.get(block=True) element.function(*element.params) Example
queue = MultithreadQueue() for i in range(1,10): queue.append(print,[1,2])
Top comments (1)
Cool Andrés! A very simple and understandable implementation of a thread pool.
You might be interest in the ThreadPoolExecutor.
It's similar to your
MultithreadQueuebut you can also get results from the submitted functions and shutdown the pool. Check it out, it's been part of Python since version 3.2