title: imap_unordered() hangs up if iterable throws an error
body: <p>Consider the file <code>sample.py</code> contains the following code:</p>
  
  <pre><code>from multiprocessing import Pool
  
  def sample_worker(x):
      print "sample_worker processes item", x
      return x
  
  def get_sample_sequence():
      for i in xrange(2,30):
          if i % 10 == 0:
              raise Exception('That sequence is corrupted!')
          yield i
  
  if __name__ == "__main__":
      pool = Pool(24)
      try:
          for x in pool.imap_unordered(sample_worker, get_sample_sequence()):
              print "sample_worker returned value", x
      except:
          print "Outer exception caught!"
      pool.close()
      pool.join()
      print "done"
  </code></pre>
  
  <p>When I execute it, I get the following output:</p>
  
  <pre><code>Exception in thread Thread-2:
  Traceback (most recent call last):
    File "C:\Python27\lib\threading.py", line 810, in __bootstrap_inner
      self.run()
    File "C:\Python27\lib\threading.py", line 763, in run
      self.__target(*self.__args, **self.__kwargs)
    File "C:\Python27\lib\multiprocessing\pool.py", line 338, in _handle_tasks
      for i, task in enumerate(taskseq):
    File "C:\Python27\lib\multiprocessing\pool.py", line 278, in &lt;genexpr&gt;
      self._taskqueue.put((((result._job, i, func, (x,), {})
    File "C:\Users\renat-nasyrov\Desktop\sample.py", line 10, in get_sample_sequence
      raise Exception('That sequence is corrupted!')
  Exception: That sequence is corrupted!
  </code></pre>
  
  <p>After that, application hangs up. How can I handle the situation without hangups?</p>