Python 2: поток перестает работать, и я не знаю почему - PullRequest
1 голос
/ 23 мая 2011

Я пытаюсь запустить поток в фоновом режиме, который зацикливается, и его можно отключить с помощью кнопки графического интерфейса, которая устанавливает для свойства 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!"

Это должно непрерывно печатать "хорошо!"но это не так.Сначала это ничего не делает.Затем, когда я нажимаю кнопку графического интерфейса, чтобы остановить его, а затем запускаю другой экземпляр MyThread, он печатает около 50 строк и останавливается.

Я использую Ubuntu Linux 11.04 с python 2.7.1

1 Ответ

1 голос
/ 23 мая 2011

Помните, что в python все потоки (которые используют интерпретатор) подчиняются GIL, и поэтому в любой момент времени только один поток выполняет код python. Это означает, что если у вас есть занятый цикл в Python Land, содержащий GIL в одном потоке, он остановит выполнение другого потока. Чтобы узнать больше о GIL, посмотрите презентации Дэвида Бизли здесь: http://www.dabeaz.com/GIL/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...