Python线程类 - 退出线程

时间:2014-10-20 17:45:15

标签: python multithreading

我正在使用线程来调用一个运行为:

的函数
def fillIQ(ipno):
    global inp_width
    global no_exit
    try:
        while 1 :
            if no_exit==1:
                sys.exit()       # <exit line>
            tags=[]
            for i in range(ipno):
                yn=random.randint(0,1)
                if yn==1:
                    voqno=random.randint(0,ipno-1)
                    if inpQ[i][voqno]<10:
                        inpQ[i][voqno]+=1
                    tag="iq"
                    tags.append(tag)
            d.update()
            time.sleep(2)
            d.delete("iq")
            drawIQ(ipno)

    except BaseException ,e:
        print "fillIQ > "+e

我正在改变main函数中no_exit的值。但是一旦我改变它,线程就不会退出。因为下次我为另一个具有不同输入的实例创建一个线程(它是一个GUI程序。对于一个输入我执行线程,然后更改输入并再次执行它),odler线程似乎运行。

1 个答案:

答案 0 :(得分:0)

要退出线程,您必须从中返回或引发SystemExit()。返回实际上会在线程的上下文中引发SystemExit异常。但你正在抓住这个例外而不是重新提升它。

>>> isinstance(SystemExit(1), BaseException)
True

有你的问题。要么单独捕获SystemExit异常并明确地重新提升它,要么对你的一般捕获更有选择性,或者重新提升你捕获的一切。为简洁起见,我举一个前者的例子

except SystemExit:
    raise
except BaseException:
    print "fillIQ > ", e

另外,请注意它是, e而不是+e,因为e不是字符串。我遇到了一些其他问题,只是试图让你的线程运行,但我相信你会很快把它们搞清楚,大多数都缺少你的例子中没有列出的导入和其他值。