Your code works for me:
from multiprocessing import Pool import time def new_awesome_function(a,b): print(a,b, 'start') time.sleep(1) print(a,b, 'end') if __name__ == '__main__': data = [1,2,3,4,5] pool = Pool(processes=4) for i, x in enumerate(data): pool.apply_async(new_awesome_function, (i, x)) pool.close() pool.join()
gave me:
0 1 start 1 2 start 2 3 start 3 4 start 1 2 end 0 1 end 4 5 start 2 3 end 3 4 end 4 5 end
Why do you think this is not working?
Edit: Try running this and looking at the exit:
from multiprocessing import Pool import time def new_awesome_function(a,b): print(a,b, 'start') time.sleep(1) print(a,b, 'end') return a + b if __name__ == '__main__': data = [1,2,3,4,5] pool = Pool(processes=4) results = [] for i, x in enumerate(data): r = pool.apply_async(new_awesome_function, (i, x)) results.append((i,r)) pool.close() already = [] while len(already) < len(data): for i,r in results: if r.ready() and i not in already: already.append(i) print(i, 'is ready!') pool.join()
My:
0 1 start 1 2 start 2 3 start 3 4 start 0 1 end 4 5 start 1 2 end 2 3 end 0 is ready! 3 4 end 1 is ready! 2 is ready! 3 is ready! 4 5 end 4 is ready!