Python 发生异常时停止线程

Python 发生异常时停止线程,python,multithreading,exit,terminate,Python,Multithreading,Exit,Terminate,我有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:

我有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()

您可以在线程中设置一个标志。在主循环中,您可以连续地
join()
所有线程,以等待它们消失,然后如果设置了标志,则打印一条消息


该标志甚至可以是异常的值…

尝试通过主线程连接所有子线程。在主线程中完成您的工作

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()
#-*-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')

示例代码中的语法错误是为了引发异常吗?好吧,您已经在这段时间内修复了它。顺便说一下,您正在启动11个线程,而不是10个。检查你的间隔逻辑。