code: def start(self):
          
          if not self._done_event.is_set():
              # Stop event not set: we're running
              return
  
          # Clear the stop event
          self._done_event.clear()
  
          # Compute the number of threads to start to handle pending tasks
          nb_pending_tasks = self._queue.qsize()
          if nb_pending_tasks > self._max_threads:
              nb_threads = self._max_threads
              nb_pending_tasks = self._max_threads
          elif nb_pending_tasks < self._min_threads:
              nb_threads = self._min_threads
          else:
              nb_threads = nb_pending_tasks
  
          # Create the threads
          for _ in range(nb_pending_tasks):
              self.__nb_pending_task += 1
              self.__start_thread()
          for _ in range(nb_threads - nb_pending_tasks):
              self.__start_thread()
docs: Starts the thread pool. Does nothing if the pool is already started.