code: def run(self):
          
          for task in self.get_next_tasks(None):
              self.executor.add_task(task, None)
          while not self.executor.is_done():
              done_task_and_result = self.executor.wait_for_tasks()
              for task, task_result in done_task_and_result:
                  self._add_sub_tasks_to_executor(task, task_result)
docs: Runs all tasks in this runner on the executor.
          Blocks until all tasks have been completed.
          :return: