J'essaie d'utiliser des threads dans un projet Python sur lequel je travaille, mais les threads ne semblent pas se comporter comme ils le devraient dans mon code. Il semble que tous les threads s'exécutent séquentiellement (c'est-à-dire que thread2 démarre après la fin du thread 1, ils ne démarrent pas tous les deux en même temps). J'ai écrit un script simple pour le tester, et cela aussi exécute des threads de manière séquentielle.Le thread Python semble exécuter des threads de façon séquentielle
import threading
def something():
for i in xrange(10):
print "Hello"
def my_thing():
for i in xrange(10):
print "world"
threading.Thread(target=something).start()
threading.Thread(target=my_thing).start()
est ici la sortie que je reçois de l'exécuter:
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
Hello
world
world
world
world
world
world
world
world
world
world
Le même comportement est observé avec beaucoup plus grand nombre d'itérations des boucles.
J'ai essayé de chercher sur le Web et les anciennes réponses SO, mais je n'ai rien trouvé qui m'aide. Quelqu'un peut-il signaler ce qui ne va pas avec ce code?
Même comportement avec 10000 itérations – MAK
Sur le projet sur lequel je travaille, l'un des threads est une boucle infinie qui écoute les messages et appelle une fonction de rappel comme ils arrivent. Il bloque juste tous les autres threads. Malheureusement, le code de boucle actuel ne peut pas être modifié (j'appelle simplement la méthode run() d'une classe dans le thread). – MAK
Lorsque je lance le script comme ceci: './pythr.py | uniq -c' je reçois: 8969 Bonjour | 1 Bonjour tout le monde | Monde 6626 | 1 | 3373 Monde | 1030 Bonjour. Cela change donc le contrôle - mais pas si souvent ... – viraptor