2015-06-15 3 views
0

Я пытаюсь запустить многолетний набор тестов в качестве фонового потока с PyQt. В osx поток никогда не запускается, но в окнах поток запускается, если я включаю инструкцию печати после запуска потока. Код выглядит следующим образом:PyQt Thread не работает

def runModuleTests(self): 
    self.stackedWidget.setCurrentIndex(2) 

    self.testThread = QtCore.QThread() 
    tr = TestRunner(self.on_testResult, self.moduleArticleNumber, self.moduleSerialNumber, self.testBedArticleNumber) 
    tr.moveToThread(self.testThread) 
    tr.testFinished.connect(self.testThread.quit) 
    self.testThread.started.connect(tr.runModuleTests) 
    self.testThread.start() 
    print "This print out is here to make threads work. UGLY HACK!" 

У меня есть следующие вопросы:

  • Это оператор печати вызывает мой графический интерфейс с получением на окнах, так что другие начинается нить?
  • Как я могу заставить поток запускать как Mac OSX, так и окна?
  • Имеет ли смысл GIL, я не могу получить отзывчивый интерфейс с помощью PyQt?
  • Я делаю что-то не так?

Я взял вдохновение от ответа на этот вопрос: Background thread with QThread in PyQt

+2

Возможно, что «TestRunner» исчерпаны? (так что 'tr = ...' должно быть 'self.tr = ...') – Zaiborg

+0

Молодцы @ Зайборг - вы его получили. Я предположил, что добавление объекта в поток будет держать его в области ... Спасибо! – mikelong

+0

Вы очень приветствуетесь – Zaiborg

ответ

0

Комментарий от @Zaiborg было то, что мне не хватало. Вам нужно держать дескриптор объекта, даже если вы переместите его в поток.