Код: Выделить всё
import threading, gtk
from time import sleep
def updaterloop():
while True:
print "something"
sleep(1)
uloop = threading.Thread(target=updaterloop)
uloop.start()
gtk.main()Работает это так:
1. Запускается дочерний поток, успевает один раз выполниться цикл (появляется надпись).
2. Дальше оба потока (основной и дочерний) ждут завершения gtk.main. Самое главное - тормозится дочерний, хотя и не должен.
3. Дальше цикл в дочернем продолжается, программу приходится убивать из консоли.
Должно быть:
1. Запускается дочерний поток и спокойно себе работает параллельно. Он никого не трогает и, что важнее, его никто не трогает.
2. Запускается и работает gtk.main в основном потоке. Параллельно с дочерним потоком, не вмешиваясь в работу последнего.
3. После завершения gtk.main завершается ВСЯ программа, включая дочерние потоки.
Если заменить gtk.main на sleep, то все работает как надо.
Пункт 3 вобщем-то не обязательно, но желательно.
Вопросы:
1. Как это сделать?
2. В чем причина такого поведения?
3. За счет чего (каких функций) gtk тормозит другой поток? Я тоже так хочу уметь
4. Как полностью завершить программу, т.е. вместе с остальными потоками? Т.е. чтобы после выхода из gtk.main программа завершалась, а не продолжалось выполнение дочернего потока.
З.Ы. Чую одной из частей моего тела - надо было выбрать Qt