import concurrent.futures import tempfile import os import shutil import subprocess def task(): dirname = tempfile.mkdtemp() f_w = open(os.path.join(dirname, "stdout.txt"), "w") f_r = open(os.path.join(dirname, "stdout.txt"), "r") e_w = open(os.path.join(dirname, "stderr.txt"), "w") e_r = open(os.path.join(dirname, "stderr.txt"), "r") with subprocess.Popen("dir", shell=True, stdout=f_w, stderr=e_w) as p: pass f_w.close() f_r.close() e_w.close() e_r.close() shutil.rmtree(dirname) def execute_tasks(N, parallel): print("Concurrency:", parallel) results = [] def task_done(f): if f.exception() is None: results.append(True) else: results.append(f.exception()) threadpool = concurrent.futures.ThreadPoolExecutor(max_workers=parallel) for i in range(N): threadpool.submit(task).add_done_callback(task_done) threadpool.shutdown() print(results) print("{} errors of {}".format(len([r for r in results if r is not True]), len(results))) import platform print(platform.platform()) execute_tasks(10, 2) execute_tasks(10, 1)