def METHOD_NAME(self, work_units: Iterable[UNIT_OF_WORK]):
    """Sends work units from work_units to workers as they become free. Usually ran in the process with mpi rank 0
    Blocks until all work units have been consumed and processed by the workers.
    Automatically terminates all workers when all work units have been consumed."""
    logger.info(f"ORCHESTRATOR: Starting orchestration of {len(self.workers)}...")
    num_busy_workers = 0
    for worker in self.workers.values():
        try:
            worker.send(next(work_units))
            num_busy_workers += 1
        except StopIteration:
            break
    while True:
        worker = self._get_finished_worker()
        try:
            worker.send(next(work_units))
        except StopIteration:
            worker.stop()
            num_busy_workers -= 1
            if num_busy_workers == 0:
                break
    for worker in self.workers.values():
        if not worker.stopped:
            worker.stop()