code: def run_dependency_graph(jobgraph, workers=None, logger=None):
      
      cmdsets = []
      for job in jobgraph:
          cmdsets = populate_cmdsets(job, cmdsets, depth=1)
  
      # Put command sets in reverse order, and submit to multiprocessing_run
      cmdsets.reverse()
      cumretval = 0
      for cmdset in cmdsets:
          if logger:  # Try to be informative, if the logger module is being used
              logger.info("Command pool now running:")
              for cmd in cmdset:
                  logger.info(cmd)
          cumretval += multiprocessing_run(cmdset, workers)
          if logger:  # Try to be informative, if the logger module is being used
              logger.info("Command pool done.")
      return cumretval
docs: Creates and runs pools of jobs based on the passed jobgraph.
  
      - jobgraph - list of jobs, which may have dependencies.
      - verbose - flag for multiprocessing verbosity
      - logger - a logger module logger (optional)
  
      The strategy here is to loop over each job in the list of jobs (jobgraph),
      and create/populate a series of Sets of commands, to be run in
      reverse order with multiprocessing_run as asynchronous pools.