title: How to change the number of multiprocessing pool workers on the go
body: <p>I want to change the number of workers in the pool that are currently used.
  My current idea is</p>
  
  <pre><code>while True:
      current_connection_number = get_connection_number()
      forced_break = False
      with mp.Pool(current_connection_number) as p:
          for data in p.imap_unordered(fun, some_infinite_generator):
              yield data
              if current_connection_number != get_connection_number():
                  forced_break = True
                  break
      if not forced_break:
          break
  </code></pre>
  
  <p>The problem is that it just terminates the workers and so the last items that were gotten from some_infinite_generator and weren't processed yet are lost. Is there some standard way of doing this?</p>
  
  <p>Edit: I've tried printing inside some_infinite_generator and it turns out p.imap_unordered requests 1565 items with just 2 pool workers even before anything is processed, how do I limit the number of items requested from generator? If I use the code above and change number of connections after just 2 items, I will loose 1563 items</p>