class DetCalcThread(threading.Thread): def __init__(self, name, m): threading.Thread.__init__(self, name = name) self.m = m self.setDaemon(True) print("Thread %s created" % self.name) def run(self): print("Thread %s started" % self.name) self.d = self.det(self.m) print("Thread %s done" % self.name) def getValue(self): return self.d def det(self, m): print("Start building permutations for thread %s" % self.name) indexListI = range(1, len(m)+1) indexListJ = s_permutations(indexListI) print("Permutations for thread %s ready" % self.name) summ = 0 for indexJ in indexListJ: sign = indexJ[1] prod = sign for indexI in indexListI: prod *= m[indexI-1][indexJ[0][indexI-1]-1] print("Thread %s stepped" % self.name) summ += prod return summ def threadedSolve(g): coeffMatrix = g[:-1] coeffThread = DetCalcThread('coeff', coeffMatrix) coeffThread.start() order = len(g) - 1 varThreads = [] for i in range(order): varMatrix = [] for j in range(order): if (i == j): varMatrix.append(g[order]) else: varMatrix.append(g[j]) detCalcThread = DetCalcThread("%i" % i, varMatrix) detCalcThread.start() varThreads.append(detCalcThread) coeffThread.join() coeffDet = coeffThread.getValue() unknowns = [] for varThread in varThreads: varThread.join() varDet = varThread.getValue() var = varDet / coeffDet unknowns.append(var) return unknowns