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.
Vous pouvez être intéressé: http://stackoverflow.com/questions/1501651/log-output-of-multiprocessing-process –