def dispatchIterator(self, stopFunc, ep=None):
        if ep is None:
            ep = self

        if self.readyCommandCount == 0:
            return
        self.strategy.update(self, ep)

        for child in self.children:
            try:
                # PRA: only the TaskNode.dispatchIterator() may raise NoRenderNodeAvailable or NoLicenseAvailableForTask
                for assignment in child.dispatchIterator(stopFunc, ep):
                    node, command = assignment
                    self.strategy.on_assignment(self, child, node)
                    yield assignment
            # If no render node available for a command, all the commands of the parent tasks will not find a RN
            except NoRenderNodeAvailable:
                return
            # Lack of licence is specific to a command, so we continue to iterate through the graph
            except NoLicenseAvailableForTask:
                LOGGER.info("Missing license for node \"%s\" (other commands can start anyway)." % self.name)
                continue
            # We should stop if stopFunction is reached
            if stopFunc():
                return
dataset/ETHPy150Open mikrosimage/OpenRenderManagement/src/octopus/dispatcher/model/node.py/FolderNode.dispatchIterator/original