Voici un petit exemple tout simple pour mettre en oeuvre les threads.
Mais je ne comprends pas pourquoi le résultat dans la console est aussi bordélique.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
from threading import Thread
from threading import Lock
import sys
 
 
G = 0
 
class MyPrinter (Thread):
 
   def __init__ (self,txt, nbr):
      Thread.__init__(self)
      self.txt = txt
      self.nbr = nbr
 
   def run (self):
      global G
      for i in range(self.nbr):
        lock = Lock()
        lock.acquire(0)
        try:
            G = G+1
            print "%s_%i" % (self.txt, G)
            sys.stdout.flush()
        finally:
            lock.release()
 
 
 
 
ThreadA = MyPrinter ("AAA",10)
ThreadA.start()
 
ThreadB = MyPrinter ("BBB",10)
ThreadB.start()
 
print "\nTheEnd\n"
 
ThreadA.join()
ThreadB.join()
 
print "\nTheRealEnd\n"
Le flush était une tentative désespérée pour caler proprement les retours à la ligne.
Quelqu'un a-t-il une solution ?

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
AAA_1
AAA_2BBB_3
TheEnd
 
 
 
BBB_4AAA_5
 
AAA_6
AAA_7BBB_8
 
AAA_9
AAA_10BBB_11
 
AAA_12BBB_13
 
BBB_14
 AAA_15
 BBB_16
 AAA_17
BBB_18
BBB_19
BBB_20
 
TheRealEnd