docs: def Stop(self, join_timeout=600):
      """This stops all the worker threads."""
      if not self.started:
        logging.warning("Tried to stop a thread pool that was not running.")
        return
  
      # Remove all workers from the pool.
      workers = list(itervalues(self._workers))
      self._workers = {}
      self._workers_ro_copy = {}
  
      # Send a stop message to all the workers. We need to be careful here to not
      # send messages while we are still counting. If threads that haven't been
      # counted yet pick up a message and exit, the count will be off and the
      # shutdown process will deadlock.
      stop_messages_needed = 0
      for worker in workers:
        if worker.isAlive():
          stop_messages_needed += 1
  
      for _ in range(stop_messages_needed):
        self._queue.put(STOP_MESSAGE)
  
      self.started = False
      self.Join()
  
      # Wait for the threads to all exit now.
      for worker in workers:
        worker.join(join_timeout)
        if worker.isAlive():
          raise RuntimeError("Threadpool worker did not finish in time.")