Bonjour,

je débute avec la notion de thread et je ne parviens pas à obtenir le comportement que je veux dans mon appli PyQt.
J'ai une liste de simulations numériques à lancer, et je voudrais les lancer simultanément.
Une "simulation" est représentée dans mon programme par un nom de fichier. Je démarre la simulation en utilisant os.system() afin d'exécuter ce fichier.
Lorsque plusieurs fichiers sont exécutés en même temps, le simulateur se charge tout seul de répartir les simulations sur les différents CPU de la machine.
Voici mon code (version simplifiée):

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
def lancerSimusParallele(self, listeSimus):
    '''
    SLOT d un bouton "Demarrer" de l IHM 
    - listeSimus: [list de str] liste des fichiers a executer
    '''
    for i in range(listeSimus):
        thread = ThreadSimu(listeSimus[i], i)
        thread.start()
Avec ci-dessous le code de ma classe "ThreadSimu":
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
class ThreadSimu(QtCore.QThread):
    '''
    QThread pour le lancement d une simulation
    '''
    def __init__(self, simu, numSimu):
        '''
        Constructeur de la classe ThreadSimu
        - simu: [str] fichier correspondant a la simulation a lancer
        - numSimu: [int] numero de la simulation
        '''
        QtCore.QThread.__init__(self)
        self.simu = simu
        self.numSimu = numSimu
 
    def start(self):
        '''
        Demarrage de la simulation
        '''
        print "DEMARRAGE DE LA SIMULATION%d"%self.numSimu
        # precalculs avant l execution du fichier
        [...]
        # Execution du fichier
        status = os.system("sh %s &" % self.simu)
        self.run()
 
    def run(self):
        '''
        Suivi du deroulement de la simulation
        '''
        time.sleep(3)   # En realite, lecture de fichiers et affichage de l'avancement sur l'IHM grace a des signaux
 
        print "SIMULATION %d TERMINEE"%self.numSimu
(Précision je suis sous Linux).
Voici le comportement que je souhaite avoir:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
DEMARRAGE DE LA SIMULATION 1
DEMARRAGE DE LA SIMULATION 2
DEMARRAGE DE LA SIMULATION 3
[...] 3 secondes s ecoulent...
SIMULATION 1 TERMINEE
SIMULATION 2 TERMINEE
SIMULATION 3 TERMINEE
Voici le comportement que j'ai avec le code ci-dessus:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
DEMARRAGE DE LA SIMULATION 1
[...] 3 secondes s ecoulent...
SIMULATION 1 TERMINEE
DEMARRAGE DE LA SIMULATION 2
[...] 3 secondes s ecoulent...
SIMULATION 2 TERMINEE
DEMARRAGE DE LA SIMULATION 3
[...] 3 secondes s ecoulent...
SIMULATION 3 TERMINEE
Le lancement des Threads en parallele ne fonctionne donc pas du tout, mais je ne comprends pas ce qui ne va pas dans mon code?
Merci d'avance pour votre aide!