Seite 1 von 1
pyQt: QThread und Python threading
Verfasst: Montag 5. Januar 2015, 16:05
von sparrow
Mahlzeit!
Aus Neugier beschäftige ich mich im Augenblick mit PyQt und der damit verbunden Programmierung.
Qt bietet ja nicht nur die reine GUI-Programmierung sondern noch einiges an Bibliotheken mehr. Manche davon konkurieren mit Funktionen die Python bereits bietet.
Unter anderem gibt es
QThread als Thread-Klasse. Python alleine kennt ja auch Threads.
Der GIL kann doch sicherlich trotzdem nur in einem der Threads arbeiten. Oder verhindert QThread den GIL?
Wäre es in Ordnung Funktionen aus threading innerhalb einer QThread-Klasse zu verwenden? threading.Event() zum Beispiel, das ich in manchen Situationen sehr komfortabel finde.
Gruß
Sparrow
Re: pyQt: QThread und Python threading
Verfasst: Montag 5. Januar 2015, 16:19
von BlackJack
@sparrow: Klar kann man auch in Qt-Programmen das `threading`-Modul verwenden. `QThread` haben den Vorteil das sie Signale auslösen können wenn sie fertig sind oder abgebrochen wurden und lassen sich da sie `QObject`\s sind in abgeleiteten Klassen auch um weitere Signale erweitern. Nachteil ist, dass man sich damit unter umständen auch in die Programmlogik eine Qt-Abhängikeit holt. Muss man halt wissen ob man das möchte oder ob es einen stört.
Re: pyQt: QThread und Python threading
Verfasst: Dienstag 6. Januar 2015, 09:02
von MagBen
sparrow hat geschrieben:Wäre es in Ordnung Funktionen aus threading innerhalb einer QThread-Klasse zu verwenden? threading.Event() zum Beispiel, das ich in manchen Situationen sehr komfortabel finde.
Ich würde nicht zwei verschiedene APIs mischen, mit denen man in etwa das Gleiche erreichen kann. Mit PyQt kannst Du QWaitCondition nehmen anstatt threading.Event(). QThread würde ich aber auch nur dann nehmen, wenn ich eine PyQt GUI baue. Wenn Du keine GUI entwickelst, dann kann die PyQt Abhängigkeit recht störend sein, wenn der Code z.B. auf einem reinen Server laufen soll, wo in der Regel kein PyQt installiert ist.
Re: pyQt: QThread und Python threading
Verfasst: Dienstag 6. Januar 2015, 11:34
von sparrow
Da hast du natürlich recht. Es geht mir schon um GUI-Programmierung.
Zumindest habe ich bisher noch nichts in der Qt-Bibliothek gefunden, das mich so ansprechen würde, dass ich es ohne die Gui verwenden würde.
Aber das GUI, das man sich damit bauen kann finde ich schon ansprechend.
Re: pyQt: QThread und Python threading
Verfasst: Dienstag 6. Januar 2015, 13:51
von jerch
@sparrow:
Sofern absehbar, dass man innerhalb der Threads oder für die Kommunikation mit den Threads nicht auf Qt-Belange (Events/Signale) angewiesen ist, würde ich GUI-fern immer auf die Standardlib setzen. Man kann zwar auch mit Qt schön strukturiert Logik schreiben, allerdings bietet Python mit den Standardtools hier meist die "ausdrucksstärkeren" Varianten. Unter C++ dagegen nehmen einem die Qt-Libs mitunter sehr viel Arbeit ab.