def Mpi_slave(self, result_out, buffer_size, compair): """ Slave process @param compair: Comparison object """ ar=Parse() status = MPI.Status() self.comm.send(1,dest=0, tag=1) root=Interaction() buffer=buffer_size flag_soft=True part=0 while(status.tag!=0): #Mise en sommeil pour la reduction de consommation de ressource while not self.comm.Iprobe(source=0, tag=MPI.ANY_TAG): time.sleep(0.1) data = self.comm.recv(source=0, tag=MPI.ANY_TAG,status=status) if(status.tag==1): #Cree le noeud du soft if(flag_soft): #compteur et nom du soft root.setSoft(data[1],data[4]) flag_soft=False #Lancement de la comparaison result = compair.runComparison(data[0]) #Parsing de la sortie ar.runParsing(data[1], data[2], data[3], data[5], data[6], result, root) #Renvoyer le resultat de la ligne de commande self.comm.send(1,dest=status.source, tag=1) #Decrease the buffer buffer-=1 #Vider le buffer if(buffer==0): #Envoie des resultats #self.comm.send(zlib.compress(root.getResult()), dest=1, tag=2) self.Mpi_write_data(root, result_out, data[1], data[4], self.myrank, part) #Vider le buffer del(root) #Remise a zero de l'arbre root=Interaction() #Reinitialisation du buffer buffer=buffer_size #Reinitialisation du flag soft flag_soft=True #Incrementation du numero de partie part+=1 #Changement de soft elif(status.tag==2): #Envoie des resultats #self.comm.send(zlib.compress(root.getResult()), dest=1, tag=2) #Write data if(buffer!=buffer_size): self.Mpi_write_data(root, result_out, data[0], data[1], self.myrank, part) #Reinitialisation du buffer buffer=buffer_size #Vider le buffer del(root) #Remise a zero de l'arbre root=Interaction() #Reinitialisation du flag soft flag_soft=True #Reinitialisation du numero de partie part=0