I want to change the number of workers in the pool that are currently used. My current idea is
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
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?
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
 
    