2012-03-26 3 views
1

У меня есть 10 тем, проблема в том, что что-то не так происходит при сборе исключения, bye будет напечатано 10 раз.остановить потоки, когда произойдет исключение

Я просто хочу распечатать его один раз, а затем завершить все потоки. Есть ли решение проблемы?

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

Try присоединиться все дочерние темы, основным потоком. И делайте свою работу в основной теме.

#-*-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') 
Смежные вопросы