Partage
  • Partager sur Facebook
  • Partager sur Twitter

Threading et Ubuntu

Sujet résolu
    12 août 2010 à 22:07:35

    Bonjour,

    ce soir je me suis essayé au thread sous Ubuntu grâce au module threading de python, je les avais déjà essayé sous Windows mais je remarque sous Ubuntu les thread sont très 'mal' gérés, voici mon code tout simple de test :
    import threading as th
    
    class Test(th.Thread):
        def __init__(self,char='a',nb=20):
            th.Thread.__init__(self)
            self.c, self.nb = char, nb
        def run(self):
            for _ in range(self.nb):
                print(self.c,end='')
    
    a = Test()
    b = Test('b')
    
    # simple if pour lancer les 2 thread en même temps vu que je code dans l'interpréteur pour mes tests
    if True:
        a.start()
        b.start()
    

    Sous Windows j'obtiens la sortie attendue (avec un processeur à 4 coeur) "abababababababababababababababababababab mais sous Linux pas tellement car j'obtiens "aaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbb" .
    Je me suis donc posé la question un peu conne, puis-je faire du multi threading sous Linux ? J'ai donc testé en changeant le nombre de caractère affiché en mettant 10000, sous Windows j'obtiens toujours une alternance 'parfaite', sous Linux par contre j'obtiens 2500 'a', puis 2500 'b', puis 2500 'a', puis 2500 'b', comme si le multi threading était 'mal' géré ? En fait je suppose qu'il y a une réponse plus 'technique' mais cela m'intrigue, donc pourquoi ai je ce résultat sous Linux ? :p

    J'espère que j'ai posé la question sur le bon forum :-°
    • Partager sur Facebook
    • Partager sur Twitter
      12 août 2010 à 23:15:13

      En fait, ton test n'a pas beaucoup de valeur, parce toutes tes threads doivent se synchroniser ou envoyer des messages à l'unique thread qui a accès à la console. De plus, cette synchronisation est leur tâche principale, puisqu'il n'y a quasiment pas de calculs à faire (voir I/O bound).

      Essaye de faire des threads très calculatoires qui n'ont aucun objet en commun, vérifie qu'il y a un rapport proche de 4 entre les vitesses de la version à 4 threads et de la version sans thread, qui ferait les mêmes calculs à la suite.
      • Partager sur Facebook
      • Partager sur Twitter
        13 août 2010 à 2:38:25

        Salut,

        De toute façon avec le GIL (global interpreter lock) les threads ne s'exécutent jamais en parallèle. Si tu veux vraiment profiter des capacités de ton/tes processeur(s) utilise le module multiprocessing.
        • Partager sur Facebook
        • Partager sur Twitter

        Threading et Ubuntu

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown