Я пытаюсь запустить поток в фоновом режиме, который петли, который я могу отключить с помощью кнопки gui, которая устанавливает свойство go объекта Thread в 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 строк и останавливается.
Я запускаю Ubuntu Linux 11.04 с помощью python 2.7.1
Помните, что в python все потоки (которые используют интерпретатор) подчиняются GIL, и поэтому в любой момент существует только один поток, на котором выполняется код python. Это означает, что если у вас есть занятая петля на земле python, удерживающая GIL в одном потоке, она прекратит выполнение другого потока. Чтобы узнать больше о GIL, ознакомьтесь с презентациями Дэвида Безли здесь: http://www.dabeaz.com/GIL/