title: `ProcessPoolExecutor` works on Ubuntu, but fails with `BrokenProcessPool` when running Jupyter 5.0.0 notebook with Python 3.5.3 on Windows 10
body: <p>I'm running Jupyter 5.0.0 notebook with Python 3.5.3 on Windows 10. The following example code fails to run:</p>
  
  <pre><code>from concurrent.futures import as_completed, ProcessPoolExecutor
  import time
  import numpy as np
  
  def do_work(idx1, idx2):
      time.sleep(0.2)
      return np.mean([idx1, idx2])
  
  with ProcessPoolExecutor(max_workers=4) as executor:
      futures = set()
      for idx in range(32):
          future = winprocess.submit(
              executor, do_work, idx, idx * 2
          )
          futures.add(future)
  
      for future in as_completed(futures):
          print(future.result())
  </code></pre>
  
  <p>... and throws <code>BrokenProcessPool: A process in the process pool was terminated abruptly while the future was running or pending.</code></p>
  
  <p>The code works perfectly fine on Ubuntu 14.04.</p>
  
  <p>I've understand that Windows doesn't have <code>os.fork</code>, thus multiprocessing is handled differently, and doesn't always play nice with interactive mode and Jupyter.</p>
  
  <p>What are some workarounds to make <code>ProcessPoolExecutor</code> work in this case?</p>
  
  <p>There are some similar questions, but they relate to <code>multiprocessing.Pool</code>:</p>
  
  <ul>
  <li><a href="https://stackoverflow.com/questions/37103243/multiprocessing-pool-in-jupyter-notebook-works-on-linux-but-not-windows">multiprocessing.Pool in jupyter notebook works on linux but not windows</a></li>
  </ul>