pyQt: QThread und Python threading

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Benutzeravatar
sparrow
User
Beiträge: 4187
Registriert: Freitag 17. April 2009, 10:28

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
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.
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

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.
a fool with a tool is still a fool, www.magben.de, YouTube
Benutzeravatar
sparrow
User
Beiträge: 4187
Registriert: Freitag 17. April 2009, 10:28

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.
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

@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.
Antworten