Ejemplo n.º 1
0
 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