Ich schreibe eine GUI-Anwendung, die regelmäßig Daten über eine Webverbindung abruft. Da dieser Abruf eine Weile dauert, reagiert die Benutzeroberfläche während des Abrufvorgangs nicht mehr (sie kann nicht in kleinere Teile aufgeteilt werden). Aus diesem Grund möchte ich die Webverbindung an einen separaten Arbeitsthread auslagern.
[Ja, ich weiß, jetzt habe ich zwei Probleme .]
Wie auch immer, die Anwendung verwendet PyQt4, daher möchte ich wissen, was die bessere Wahl ist: Verwenden Sie die Threads von Qt oder das Python- threading
Modul? Was sind die Vor- und Nachteile der einzelnen? Oder haben Sie einen ganz anderen Vorschlag?
Bearbeiten (erneutes Kopfgeld): Während die Lösung in meinem speziellen Fall wahrscheinlich darin besteht, eine nicht blockierende Netzwerkanforderung zu verwenden, wie von Jeff Ober und Lukáš Lalinský vorgeschlagen (so dass die Parallelitätsprobleme im Grunde der Netzwerkimplementierung überlassen bleiben ), möchte ich dennoch eine weitere ausführliche Antwort auf die allgemeine Frage:
Welche Vor- und Nachteile hat die Verwendung von PyQt4-Threads (dh Qt-Threads) gegenüber nativen Python-Threads (aus dem threading
Modul)?
Edit 2: Vielen Dank für Ihre Antworten. Obwohl es keine 100% ige Übereinstimmung gibt, scheint es einen weit verbreiteten Konsens darüber zu geben, dass die Antwort "Qt verwenden" lautet, da der Vorteil darin besteht, dass die Integration in den Rest der Bibliothek erfolgt und keine wirklichen Nachteile entstehen.
Für alle, die zwischen den beiden Threading-Implementierungen wählen möchten, empfehle ich dringend, alle hier bereitgestellten Antworten zu lesen, einschließlich des PyQt-Mailinglisten-Threads, auf den der Abt verweist.
Es gab mehrere Antworten, die ich für das Kopfgeld in Betracht gezogen hatte; Am Ende wählte ich Abt als sehr relevante externe Referenz; Es war jedoch ein enger Anruf.
Danke noch einmal.