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 ?
J'espère que j'ai posé la question sur le bon forum
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.
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.
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.