code: def run(self):
      
      while True:
        if self.pool.name:
          self.idle = True
  
        try:
          # Wait 60 seconds for a message, otherwise exit. This ensures that the
          # threadpool will be trimmed down when load is light.
          task = self._queue.get(timeout=60)
  
          if self.pool.name:
            self.idle = False
  
          try:
            # The pool told us to quit, likely because it is stopping.
            if task == STOP_MESSAGE:
              return
  
            self.ProcessTask(*task)
          finally:
            self._queue.task_done()
  
        except queue.Empty:
          if self._RemoveFromPool():
            return
  
        # Try to trim old threads down when they get too old. This helps the
        # thread pool size to shrink, even when it is not idle (e.g. if it is CPU
        # bound) since threads are forced to exit, but new threads will not be
        # created if the utilization is too high - resulting in a reduction of
        # threadpool size under CPU load.
        if time.time() - self.started > 600 and self._RemoveFromPool():
          return
docs: This overrides the Thread.run method.
  
      This method checks in an endless loop if new tasks are available
      in the queue and processes them.