Python 2: поток перестает работать, и я не знаю почему

1

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

  • 0
    Есть ли другой поток, который удерживает процесс и не позволяет запустить этот поток?
  • 0
    @Dan В основном потоке запущен основной цикл gtk. Из того, что я прочитал, потоки ввода / вывода не поддерживают GIL. Является ли GTK исключением? Как бы я это исправить?
Теги:
multithreading

1 ответ

1

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

  • 0
    Спасибо за ответ. Это имеет смысл. У меня gtk.main () работает в основном потоке. Так что, думаю, мне нужно это исправить, чтобы gtk не держал gil. Но как бы я это сделал? Будет ли это включать блокировку объектов?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню