title: ProcessPoolExecutor, BrokenProcessPool handling
body: <p>In this documentation ( <a href="https://pymotw.com/3/concurrent.futures/" rel="nofollow noreferrer">https://pymotw.com/3/concurrent.futures/</a> ) it says:</p>
  
  <p><em>"The ProcessPoolExecutor works in the same way as ThreadPoolExecutor, but uses processes instead of threads. This allows CPU-intensive operations to use a separate CPU and not be blocked by the CPython interpreter’s global interpreter lock."</em></p>
  
  <p>This sounds great! It also says:</p>
  
  <p><em>"If something happens to one of the worker processes to cause it to exit unexpectedly, the ProcessPoolExecutor is considered “broken” and will no longer schedule tasks."</em></p>
  
  <p>This sounds bad :( So I guess my question is: What is considered "Unexpectedly?" Does that just mean the exit signal is not 1? Can I safely exit the thread and still keep processing a queue? The example is as follows:</p>
  
  <pre><code>from concurrent import futures
  import os
  import signal
  
  
  with futures.ProcessPoolExecutor(max_workers=2) as ex:
      print('getting the pid for one worker')
      f1 = ex.submit(os.getpid)
      pid1 = f1.result()
  
      print('killing process {}'.format(pid1))
      os.kill(pid1, signal.SIGHUP)
  
      print('submitting another task')
      f2 = ex.submit(os.getpid)
      try:
          pid2 = f2.result()
      except futures.process.BrokenProcessPool as e:
          print('could not start new tasks: {}'.format(e))
  </code></pre>