Я читал о том, как правильно использовать QThreads, и я немного запутался. Я читал, и многие люди говорили, создают QThread, но также создают рабочего, который является QObject. Затем используйте movetoThread для перемещения Qobject в Qthread.pyqt - Как обеспечить, чтобы все мои вычисления выполнялись в отдельном Qthread?
Я просто немного смущен, так как все примеры, которые я видел в stackoverflow, на самом деле этого не делают.
Если это мой код:
class worker(QThread):
def __init__(self):
Qthread.__init__(self)
def run(self):
do_work()
a = 3
def do_work(self):
b = 2
self.emit(SIGNAL("work_done"),b)
class MyApp(QtGui.QMainWindow):
QtGui.QMainWindow.__init__(self, parent)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.worker_thread = worker()
self.connect(self.worker,SIGNAL('work_done'),self.done)
self.worker_thread.start()
def done(self,b)
print "the value from the worker is: " + str(b)
Будет ли этот код делает назначение переменных a
и b
сделано в другом потоке отдельно от основного потока? Или это не так, поскольку мой объект worker_thread
ЖИВЕТ ВНУТРИ основной поток?
Сообщение, в котором вы были связаны, устарело, и оно было отменено [QThread: вы не ошибались] (https://woboq.com/blog/qthread-you-were-not-doing-so-wrong .html). Краткое изложение: если в рабочем потоке (который очень часто бывает) не нужен цикл событий в рабочем потоке, просто подкласс 'QThread' и reimplement' run'. – ekhumoro
@ekhumoro Это не устарело, это действительно зависит от того, что вы делаете в отдельной теме. Если вы просто хотите запустить какой-то инкапсулированный код, то подклассом и переопределением 'run()' отлично. Но если вам нужен объект, с которым вы можете общаться, лучше использовать подход, который я здесь даю. – bnaecker
Нет, это действительно устарело. В нем говорится, что официальные документы Qt-потока ошибочны (они больше не существуют), а также заявляют «подклассу [QThread] и реализуют вашу собственную функцию run(), это очень неправильно», что также явно неверно. Пожалуйста, прочитайте другое сообщение в блоге, которое я связал, чтобы понять историю по этому вопросу - это не очень долго, и оно правильно отражает рекомендации, приведенные в текущих документах Qt. – ekhumoro