Python 2:线程停止运行,我不知道为什么

时间:2011-05-23 00:03:55

标签: python multithreading ubuntu

我正在尝试在后台运行一个线程循环,我可以使用gui按钮关闭该线程,该按钮将Thread对象的go属性设置为false。但是线程只运行一瞬间。

    class MyThread(threading.Thread):
            def __init__(self):
                    threading.Thread.__init__(self)
                    self.go = True
            def run(self):
                    while self.go:
                            print "okay!"

这应该不断打印“好的!”但事实并非如此。起初它什么也没做。然后,当我按下gui按钮停止它然后启动另一个MyThread实例时,它会打印大约50行并停止。

我使用python 2.7.1运行Ubuntu Linux 11.04

1 个答案:

答案 0 :(得分:1)

请记住,在python中,所有线程(使用解释器)都受GIL限制,因此任何时候都只有一个线程运行python代码。这意味着如果你在一个线程中持有GIL的python land中有一个繁忙的循环,它将停止执行另一个线程。要了解有关GIL的更多信息,请在此处查看David Beazley的演示文稿:http://www.dabeaz.com/GIL/