Thank you guys, indeed, calling join() for each thread actually solved the problem. I misunderstood it and call join() right after start() so it didn't work the way I wanted. for i in range(args.threads): children[i].join()