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

1 投票
1 回答
2676 浏览
提问于 2025-04-16 18:09

我想让一个线程在后台运行,并且这个线程会不断循环。我希望能通过一个图形界面按钮来关闭它,这个按钮会把线程对象的go属性设置为false。不过,这个线程只运行了一瞬间。

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

这个线程应该一直打印“okay!”,但实际上并没有。开始的时候它什么都不做。然后当我按下图形界面的按钮来停止它,再启动另一个MyThread实例时,它才打印了大约50行,然后就停止了。

我在使用Ubuntu Linux 11.04,Python版本是2.7.1。

1 个回答

1

记住,在Python中,所有使用解释器的线程都受到GIL的限制,这意味着在任何时候只有一个线程可以运行Python代码。这就意味着,如果你在Python中有一个繁忙的循环占用了GIL,那么它会阻止其他线程的执行。如果想了解更多关于GIL的内容,可以看看David Beazley的演讲,链接在这里:http://www.dabeaz.com/GIL/

撰写回答