Python 2: 线程停止运行,我不知道为什么
我想让一个线程在后台运行,并且这个线程会不断循环。我希望能通过一个图形界面按钮来关闭它,这个按钮会把线程对象的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/