code: def parallel_split_combine(args, split_fn, parallel_fn,
                             parallel_name, combiner,
                             file_key, combine_arg_keys, split_outfile_i=-1):
      
      args = [x[0] for x in args]
      split_args, combine_map, finished_out, extras = _get_split_tasks(args, split_fn, file_key,
                                                                       split_outfile_i)
      split_output = parallel_fn(parallel_name, split_args)
      if isinstance(combiner, six.string_types):
          combine_args, final_args = _organize_output(split_output, combine_map,
                                                      file_key, combine_arg_keys)
          parallel_fn(combiner, combine_args)
      elif callable(combiner):
          final_args = combiner(split_output, combine_map, file_key)
      return finished_out + final_args + extras
docs: Split, run split items in parallel then combine to output file.
  
      split_fn: Split an input file into parts for processing. Returns
        the name of the combined output file along with the individual
        split output names and arguments for the parallel function.
      parallel_fn: Reference to run_parallel function that will run
        single core, multicore, or distributed as needed.
      parallel_name: The name of the function, defined in
        bcbio.distributed.tasks/multitasks/ipythontasks to run in parallel.
      combiner: The name of the function, also from tasks, that combines
        the split output files into a final ready to run file. Can also
        be a callable function if combining is delayed.
      split_outfile_i: the location of the output file in the arguments
        generated by the split function. Defaults to the last item in the list.