code: def parallel_progbar(mapper, iterable, nprocs=None, starmap=False, flatmap=False, shuffle=False,
                       verbose=True, verbose_flatmap=None, **kwargs):
      
  
      results = _parallel_progbar_launch(mapper, iterable, nprocs, starmap, flatmap, shuffle, verbose, verbose_flatmap, **kwargs)
      return [x for i, x in sorted(results, key=lambda p: p[0])]
docs: Performs a parallel mapping of the given iterable, reporting a progress bar as values get returned
  
      :param mapper: The mapping function to apply to elements of the iterable
      :param iterable: The iterable to map
      :param nprocs: The number of processes (defaults to the number of cpu's)
      :param starmap: If true, the iterable is expected to contain tuples and the mapper function gets each element of a
          tuple as an argument
      :param flatmap: If true, flatten out the returned values if the mapper function returns a list of objects
      :param shuffle: If true, randomly sort the elements before processing them. This might help provide more uniform
          runtimes if processing different objects takes different amounts of time.
      :param verbose: Whether or not to print the progress bar
      :param verbose_flatmap: If performing a flatmap, whether or not to report each object as it's returned
      :param kwargs: Any other keyword arguments to pass to the progress bar (see ``progbar``)
      :return: A list of the returned objects, in the same order as provided