def processMain(matrixIdx): global mainPidProcess threads = [] actualTasks = Tasks(os.getpid() - mainPidProcess, matrixIdx) lockErrors = threading.Lock() lockCompleted = threading.Lock() # for i in range(numthreads): # threads.append(Thread(target=threadsVerify, args=(matrixIdx,actualTasks))) # for i in range(numthreads): # threads[i].start() # for i in range(numthreads): # threads[i].join() with ThreadPoolExecutor(max_workers=numthreads) as pool: for i in range(9): pool.submit(checkRow, matrixIdx, actualTasks, lockErrors, lockCompleted) pool.submit(checkCollum, matrixIdx, actualTasks, lockErrors, lockCompleted) pool.submit(checkArea, matrixIdx, actualTasks, lockErrors, lockCompleted) with lock: actualTasks.setFinalLog()