2012-03-26 8 views
1

Ich habe 10 Threads, das Problem ist, wenn etwas falsch passiert die Ausnahme, bye wird 10 Mal gedruckt werden.Stopp-Threads, wenn Ausnahme passieren

Ich möchte nur einmal drucken, dann alle Threads beenden. Gibt es eine Lösung für das Problem?

from threading import Thread 
def printmsg(msg,threadNumber): 
    while True: 
     try: 
      print 'this is your message %s -- Thread Number:%s'%(msg,threadNumber) 
     except: 
       exit('Bye') 

for i in range(0,11): 
    Thread(target=printmsg,args=('Hello Wrold',str(i))).start() 
+0

Ist der Syntaxfehler in Ihrem Beispielcode absichtlich eine Ausnahme? – Fenikso

+0

ich verstehe Sie nicht Sir – Hamoudaq

+0

Nun, Sie haben es in der Zwischenzeit behoben. – Fenikso

Antwort

1

Sie könnten ein Flag in den Threads festlegen. In der Hauptschleife, könnten Sie alle Threads hintereinander join() warten, bis sie weg sind und dann eine Nachricht drucken, wenn das Flag gesetzt ist.

Die Flagge könnte sogar der Wert der Ausnahme sein ...

0
from threading import Thread, Lock 

stop = False 
lock = Lock() 

def printmsg(msg, threadNumber): 
    global stop 
    while True: 
     try: 
      if threadNumber in [3, 5, 7, 9]: # Something wrong happens 
       raise NotImplementedError 

      lock.acquire() 
      if stop: 
       lock.release() 
       break 
      print 'This is your message %s -- Thread Number: %s' % (msg, threadNumber) 
      lock.release() 
     except NotImplementedError: 
      lock.acquire() 
      if not stop: 
       stop = True 
       print 'Bye' 
      lock.release() 
      break 

for i in range(0,11): 
    Thread(target=printmsg, args=('Hello World', i)).start() 
0

Versuchen vom Haupt-Thread all Kind Fäden zu verbinden. Und mach deinen Job im Hauptthread.

#-*-coding:utf-8-*- 

from threading import Thread 

def printmsg(msg,threadNumber): 
    while True: 
     try: 
      print 'this is your message %s -- Thread Number:%s'%(msg,threadNumber) 
      raise 
     except: 
      break 

if __name__ == '__main__': 
    threads = [] 
    for i in range(0,11): 
     threads.append(Thread(target=printmsg,args=('Hello Wrold',str(i)))) 
    for t in threads: 
     t.start() 
    for t in threads: 
     t.join() 
    exit('Bye')