Узнав, что причиной сбоя является исключение C ++ (с помощью phihag), я изменил свой код таким образом, и это устранило проблему:
def SetProgramListCB(programDesc):
try:
print ui.ravisParser.sig
ui.ravisParser.sig.emit(programDesc)
except:
print "Error"
В случае правильной работы яhave (output):
<PySide.QtCore.Signal object at 0x01DD88C0>
<PySide.QtCore.Signal object at 0x01DD88C0>
<PySide.QtCore.Signal object at 0x01DD88C0>
...
И в случае ошибки:
Error
<PySide.QtCore.Signal object at 0x01DD88C0>
<PySide.QtCore.Signal object at 0x01DD88C0>
<PySide.QtCore.Signal object at 0x01DD88C0>
...
Таким образом, причиной сбоя было то, что при первом вызове emit () сигнал 'sig' не былинициализируется.Я не могу понять, как это могло произойти, потому что обратный вызов вызывается из потока, который начинается при вызове parser.Start (), который вызвал после сигнала подключения 'sig':
parser.sig.connect(SetProgramList, Qt.QueuedConnection)
parser.Start()