docs: def run_parallel(self):
          """Perform the computation in parallel, reading results from the output
          queue and passing them to ``process_result``.
          """
          try:
              self.start_parallel()
  
              result = self.empty_result(*self.context)
  
              while self.num_processes > 0:
                  r = self.result_queue.get()
                  self.maybe_put_task()
  
                  if r is POISON_PILL:
                      self.num_processes -= 1
  
                  elif isinstance(r, ExceptionWrapper):
                      r.reraise()
  
                  else:
                      result = self.process_result(r, result)
                      self.progress.update(1)
  
                      # Did `process_result` decide to terminate early?
                      if self.done:
                          self.complete.set()
  
              self.finish_parallel()
          except Exception:
              raise
          finally:
              log.debug('Removing progress bar')
              self.progress.close()
  
          return result