Lorsqu'on fait de la programmation multi-thread, il faut toujours faire bien attention à identifier et protéger les ressources partagées entre plusieurs threads.
Dans ton cas, sys.stdout, est une ressources partagée qu'il faut protéger au moyen d'un mutex. Avec le module threading de python, c'est très simple, il te faut une variable partagée entre tous les threads et que tu lock dès que tu veux afficher quelquechose. Par exemple :
#La variable partagée entre tous les threads
stdoutlock = threading.Lock()
[...]
#lorsqu'on veut afficher :
try:
stdoutlock.acquire()
sys.stdout.write("toto")
sys.stdout.flush()
finally:
stdoutlock.release()
Le plus simple étant d'encapsuler le acquire(), write(), release() dans une fonction.
# Il faut protéger les ressources partagées
Posté par Étienne . En réponse au message Threading : comment faire un sys.stdout sur plusieurs lignes (ou identifier chaque thread) ?. Évalué à 2.
Dans ton cas, sys.stdout, est une ressources partagée qu'il faut protéger au moyen d'un mutex. Avec le module threading de python, c'est très simple, il te faut une variable partagée entre tous les threads et que tu lock dès que tu veux afficher quelquechose. Par exemple :
#La variable partagée entre tous les threads
stdoutlock = threading.Lock()
[...]
#lorsqu'on veut afficher :
try:
stdoutlock.acquire()
sys.stdout.write("toto")
sys.stdout.flush()
finally:
stdoutlock.release()
Le plus simple étant d'encapsuler le acquire(), write(), release() dans une fonction.