title: Wait for all multiprocessing jobs to finish before continuing
body: <p>I want to run a bunch of jobs in parallel and then continue once all the jobs are finished. I've got something like</p>
  
  <pre><code># based on example code from https://pymotw.com/2/multiprocessing/basics.html
  import multiprocessing
  import random
  import time
  
  def worker(num):
      """A job that runs for a random amount of time between 5 and 10 seconds."""
      time.sleep(random.randrange(5,11))
      print('Worker:' + str(num) + ' finished')
      return
  
  if __name__ == '__main__':
      jobs = []
      for i in range(5):
          p = multiprocessing.Process(target=worker, args=(i,))
          jobs.append(p)
          p.start()
  
      # Iterate through the list of jobs and remove one that are finished, checking every second.
      while len(jobs) &gt; 0:
          jobs = [job for job in jobs if job.is_alive()]
          time.sleep(1)
  
      print('*** All jobs finished ***')
  </code></pre>
  
  <p>it works, but I'm sure there must be a better way to wait for all the jobs to finish than iterating over them again and again until they are done.</p>