2012-08-03 7 views
0

Je suis nouveau à multithreading python et source de confusion avec le code Beblow:sortie Python multithreading

#!/usr/bin/env python 

import thread 
from time import sleep, ctime 

loops = [4, 2] 

def loop(nloop, nsec, lock): 
    print 'start loop', nloop, 'at:', ctime() 
    sleep(nsec) 
    print 'loop', nloop, 'done at:', ctime() 
    lock.release() 

def main(): 
    print 'starting at:', ctime() 
    locks = [] 
    nloops = range(len(loops)) 

    for i in nloops: 
     lock = thread.allocate_lock() 
     lock.acquire() 
     locks.append(lock) 

    for i in nloops: 
     thread.start_new_thread(loop, 
        (i, loops[i], locks[i])) 

    for i in nloops: 
     while locks[i].locked(): 
      pass 

    print 'all done at:', ctime() 

if __name__ == '__main__': 
    main() 

Quand j'ai essayé de courir, je suis le résultat ci-dessous

starting at: Fri Aug 03 17:07:20 2012 
start loopstart loop 01 at:at: Fri Aug 03 17:07:20 2012Fri Aug 03 17:07:20 20 
12 

loop 1 done at: Fri Aug 03 17:07:22 2012 
loop 0 done at: Fri Aug 03 17:07:24 2012 
all done at: Fri Aug 03 17:07:24 2012 

comme vous le voyez, le « début "Les sorties de ces deux threads ont été mélangées et je suppose qu'il y a quelque chose en conflit, mais je ne comprends pas les détails et comment y remédier, quelqu'un peut-il m'aider? Merci.

+0

Vous pouvez être intéressé: http://stackoverflow.com/questions/1501651/log-output-of-multiprocessing-process –

Répondre

0

C'est une situation plutôt habituelle lorsque vous travaillez avec des threads et des E/S - les threads écrivent simultanément sur stdout et leurs messages sont mélangés.

Votre implémentation multithread ne devrait pas poser de problème.