import subprocess import time commands_to_run = ['ls -alh' for _ in range(100)] max_procs = 16 processes = [] while (len(processes) > 0) or (len(commands_to_run) > 0): if (len(processes) < max_procs) & (len(commands_to_run) > 0): this_cmd = commands_to_run.pop() print(this_cmd) this_proc = subprocess.Popen(this_cmd, shell=True) processes.append(this_proc) for i in range(len(processes)): this_proc = processes[i] if this_proc.poll() is not None: return_code = this_proc.poll() print('Process exited with code: ' + str(return_code)) del processes[i] break time.sleep(5)