import multiprocessing as mp import time def func(a,_,b): return a + b def this_works(pool, queue): w = [] for i in range(10): w.append(pool.apply_async(func, args=(i, queue, i + 2), callback=lambda x: print(x))) while any([x for x in w if not x.ready()]): time.sleep(0.1) def and_this_is_broken(pool, queue): w = [] for i in range(10): w.append(pool.apply_async(func, args=(i, queue, i + 100), callback=lambda x: print(x))) while any([x for x in w if not x.ready()]): time.sleep(0.1) if __name__ == '__main__': pool = mp.Pool(processes=2) queue = mp.Manager().Queue() this_works(pool, queue) queue = mp.Queue() and_this_is_broken(pool, queue)