Ich habe gelesen, wie man QThreads "richtig" benutzt und ich bin ein bisschen verwirrt geworden. Ich habe herumgelesen und eine Menge Leute haben dazu gesagt, ein QThread zu erstellen, aber auch einen Worker zu erstellen, der ein QObject ist. Verwenden Sie dann movetoThread, um das Qobject in Qthread zu verschieben.pyqt - Wie stelle ich sicher, dass alle meine Berechnungen in einem separaten Qthread ausgeführt werden?
Ich bin nur ein wenig verwirrt, da all die Beispiele, die ich auf Stackoverflow gesehen habe, das nicht wirklich tun.
Wenn dies mein Code:
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)
Wird dieser Code macht die Zuordnung von Variablen a
und b
in einem anderen Thread aus dem Hauptthread TRENNEN getan? Oder ist das nicht wahr, wie mein worker_thread
Objekt LEBT INSIDE den Hauptfaden?
Der Beitrag, mit dem Sie verlinkt haben, ist veraltet und wurde von [QThread: Sie tun nicht so falsch] (https://woboq.com/blog/qthread-you-were-not-doing-so-wrong) ersetzt .html). Zusammenfassung: Wenn Sie im Worker-Thread keine Ereignisschleife benötigen (was sehr oft der Fall ist), führen Sie einfach die Unterklasse 'QThread' aus und reimplementieren Sie' run'. – ekhumoro
@ekhumoro Es ist nicht veraltet, es hängt wirklich davon ab, was Sie in dem separaten Thread tun. Wenn Sie nur etwas gekapselten Code ausführen möchten, ist das Unterklassifizieren und erneute Implementieren von 'run()' in Ordnung. Aber wenn Sie ein Objekt haben wollen, mit dem Sie kommunizieren können, ist es besser, den Ansatz zu verwenden, den ich hier gebe. – bnaecker
Nein, es ist wirklich veraltet. Es sagt, dass die offiziellen Qt-Thread-Dokumente falsch sind (was sie nicht mehr sind), und behauptet auch, "zu Unterklasse [QThread] und implementieren Sie Ihre eigene run() -Funktion, ist sehr falsch" - was auch eindeutig falsch ist. Bitte lies den anderen Blog-Beitrag, den ich verlinkt habe, um die Geschichte zu diesem Thema zu verstehen - es ist nicht sehr lang und spiegelt die Empfehlungen in den aktuellen Qt-Dokumenten wider. – ekhumoro