• # Il faut protéger les ressources partagées

    Posté par . En réponse au message Threading : comment faire un sys.stdout sur plusieurs lignes (ou identifier chaque thread) ?. Évalué à 2.

    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.