Я пытаюсь использовать QThreads для обновления пользовательского интерфейса на основе Qt моего собственного инструмента в Maya. У меня есть поток, который выполняет произвольные методы и возвращает результат через излучаемый сигнал, который я затем использую для обновления своего пользовательского интерфейса. Вот мой собственный класс QThread:
from PySide import QtCore
class Thread(QtCore.QThread):
result = QtCore.Signal(object)
def __init__(self, parent, method, **kwargs):
super(Thread, self).__init__(parent)
self.parent = parent
self.method = method
self.kwargs = kwargs
def run(self):
result = self.method(**self.kwargs)
self.result.emit(result)
Методы, которые я передаю в поток, - это основные запросы для получения сериализованных данных с веб-адреса, например:
import requests
def request_method(address):
request = requests.get(address)
return request.json()
И вот как я использую нить в своем пользовательском инструменте для динамического обновления моего интерфейса:
...
thread = Thread(parent=self, method=request_method, address='http://www.example.com/')
thread.result.connect(self._slot_result)
thread.start()
def _slot_result(self, result):
# Use the resulting data to update some UI element:
self.label.setText(result)
...
Этот рабочий процесс работает в других DCC, таких как Nuke, но по какой-то причине он иногда приводит к сбою в Maya. Нет сообщения об ошибке, нет журнала, просто тяжелый сбой.
Это заставляет меня думать, что мой дизайн рабочего процесса QThread явно не дружествен к майя. Любые идеи, как лучше избежать краха Maya при использовании QThreads и что может быть причиной этой конкретной проблемы?