2012-03-26 30 views
1

スレッドが10個あり、問題が発生して例外が発生した場合は、byeが10回印刷されます。例外が発生したときにスレッドを停止する

ただ1回印刷してから、すべてのスレッドを終了してください。問題の解決策はありますか?

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

例外を発生させるために、サンプルコードに構文エラーがありますか? – Fenikso

+0

私はあなたを理解していません – Hamoudaq

+0

さて、あなたはその間にそれを修正しました。 – Fenikso

答えて

1

スレッドにフラグを設定できます。 nメインル​​ープでは、フラグがセットされていれば、メッセージが消えるまで待つためにすべてのスレッドを連続してjoin()にすることができます。

フラグがさえ

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

は、メインスレッドですべての子スレッドに参加してみてください...例外の値である可能性があります。そして、メインスレッドであなたの仕事をしてください。

#-*-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') 
関連する問題