code: def execute(self):
          
  
          with self._lock_c:
              self.count = 0
              self.numtasks = 0
              self.taskset = []
              self.results = {}
              self.totaltime = time.time()
              # Start all tasks
              for task in self.taskseq:
                  self.taskset.append(task)
                  self.numtasks += 1
                  task.init_and_start(self)
  
          num_tasks = self.getNumTasks()
          # Wait on each task to clean up results
          while num_tasks > 0:
  
              self.check_state()
  
              for i in range(num_tasks):
                  try:
                      try:
                          task = self.getTask(i)
                      except IndexError:
                          # A task got deleted from the set.  Jump back out
                          # to outer loop and repoll the number of tasks
                          break
  
                      #self.logger.debug("waiting on %s" % task)
                      res = task.wait(timeout=self.idletime)
  
                      #self.logger.debug("finished: %s" % task)
                      self.child_done(res, task)
  
                  except TaskTimeout:
                      continue
  
                  except Exception as e:
                      #self.logger.warning("Subtask propagated exception: %s" % str(e))
                      self.child_done(e, task)
                      continue
  
              # wait a bit and try again
              #self.ev_quit.wait(self.idletime)
  
              # re-get number of tasks, in case some were added or deleted
              num_tasks = self.getNumTasks()
  
          # Scan results for errors (exceptions) and raise the first one we find
          for key in self.results.keys():
              value = self.results[key]
              if isinstance(value, Exception):
                  (count, task) = key
                  self.logger.error("Child task %s terminated with exception: %s" % (
                      task.tag, str(value)))
                  raise value
  
          # Return value of last child to complete
          return value
docs: Run all child tasks concurrently in separate threads.
          Return last result after all child tasks have completed execution.