Seite 1 von 1

GUI-Fenster öffnet stark verzögert

Verfasst: Donnerstag 19. April 2018, 12:32
von Patrick1990
Hallo,

und wieder habe ich eine Frage.
Ich öffne die GUIs mit einer Windows Batch-Datei, welche das erforderliche Python-File startet.
Bei einigen der GUIs dauert es etwa 10s bis die Fenster sich öffnen. Woran kann das liegen? Die Dateigrößen sond um die 70 KB.

Re: GUI-Fenster öffnet stark verzögert

Verfasst: Donnerstag 19. April 2018, 12:52
von Sirius3
@Patrick1990: wenn es von der GUI abhängt, wird es wohl irgendwas sein, was Du im Pythonprogramm so machst.

Re: GUI-Fenster öffnet stark verzögert

Verfasst: Donnerstag 19. April 2018, 12:56
von Patrick1990
Es ist einzig das Öffnen von einem Fenster und das Setzen von Initialwerten und ein paar Einstellungen. Nichts gravierendes was Berechnungen erfordern würde.

Re: GUI-Fenster öffnet stark verzögert

Verfasst: Donnerstag 19. April 2018, 13:41
von __deets__
Qt und PyQt sind sehr grosse Projekte. Wenn du da wild importierst etc. dann kann es einfach lange dauern, bis die ganzen shared libraries etc. geladen sind. Da koennte man mit profiling drauf schaun & versuchen zu optimieren.

Wenn das nicht schneller zu bekommen ist, musst du deinen Ansatz in Frage stellen. Warum musst du mehrere GUIs haben, reicht nicht eine, die dann mit Daten gefuettert wird zB.

Re: GUI-Fenster öffnet stark verzögert

Verfasst: Freitag 20. April 2018, 10:25
von Patrick1990
__deets__ hat geschrieben:Qt und PyQt sind sehr grosse Projekte. Wenn du da wild importierst etc. dann kann es einfach lange dauern, bis die ganzen shared libraries etc. geladen sind. Da koennte man mit profiling drauf schaun & versuchen zu optimieren.

Wenn das nicht schneller zu bekommen ist, musst du deinen Ansatz in Frage stellen. Warum musst du mehrere GUIs haben, reicht nicht eine, die dann mit Daten gefuettert wird zB.
Habe nun alles geändert und nur noch das Notwendigste importiert. Leider keine signifikante Verbesserung.
Öffne ich die GUI aus Spyder heraus, kommt das Fenster sofort.

Der Aufruf über die Batch-Datei dauert hingegen 10s.


Es sind mehrere GUIs, da diese für unterschiedliche Programme sind.

Re: GUI-Fenster öffnet stark verzögert

Verfasst: Freitag 20. April 2018, 10:34
von __deets__
Lässt Spider immer die gleiche Interpreter-Instanz laufen? Oder wir der jedes Mal neu gestartet? Sonst hab ich erstmal keine Erklärungen mehr.

Re: GUI-Fenster öffnet stark verzögert

Verfasst: Freitag 4. Mai 2018, 18:38
von Sophus
@Patrick1990 Lädst du die GUI dynamisch oder als Python-Datei? Mit PyQt hat man mehrere Möglichkeiten, die Fenster zu öffnen. Entweder man erstellt mittels QDesigner eine *.ui-Datei und lädt diese direkt und dynamisch oder aber man lässt die *.ui-Datei zunächst in eine Python-Datei konvertieren. Diese Variante hat den Nachteil, dass immer ein Zwischenschritt erforderlich ist, hat aber den Vorteil, dass die GUIs auf diese Weise schneller geladen werden.

Re: GUI-Fenster öffnet stark verzögert

Verfasst: Dienstag 8. Mai 2018, 09:52
von Patrick1990
Sophus hat geschrieben:@Patrick1990 Lädst du die GUI dynamisch oder als Python-Datei? Mit PyQt hat man mehrere Möglichkeiten, die Fenster zu öffnen. Entweder man erstellt mittels QDesigner eine *.ui-Datei und lädt diese direkt und dynamisch oder aber man lässt die *.ui-Datei zunächst in eine Python-Datei konvertieren. Diese Variante hat den Nachteil, dass immer ein Zwischenschritt erforderlich ist, hat aber den Vorteil, dass die GUIs auf diese Weise schneller geladen werden.
Ich wandle die ui-Datei zunächst in eine Python-Datei. Also sollte es ja daran nicht liegen.

Re: GUI-Fenster öffnet stark verzögert

Verfasst: Dienstag 8. Mai 2018, 11:00
von Sirius3
@Sophus: hast Du das mal geprofiled?

@Patrick1990: man wandelt keine ui-Dateien in py-Dateien um, weil das nur alles komplizierter macht und keinen Vorteil bringt. Hast Du Dein Programm mal geprofiled um zu sehen, wo die Zeit verbraucht wird?

Re: GUI-Fenster öffnet stark verzögert

Verfasst: Dienstag 8. Mai 2018, 11:47
von Patrick1990
Patrick1990 hat geschrieben: Öffne ich die GUI aus Spyder heraus, kommt das Fenster sofort.

Der Aufruf über die Batch-Datei dauert hingegen 10s.
Da kann ich ja vermutlich den Profiler bemühen wie ich will. Das Problem liegt davor.

Re: GUI-Fenster öffnet stark verzögert

Verfasst: Dienstag 8. Mai 2018, 11:57
von __deets__
Jein. Wenn irgendwas in der batchdatei vorher lange dauert, klar. Aber so wie du das zumindest beschreibst setzt die batch-Datei ja das Startkommando ab, und *dann* dauert es eeeeewig. Ich habe zwar keine Ahnung was dann da passiert, aber das kann man ggf. schon profilen.

Anfangen wuerde ich aber erstmal mit einem einfachen nicht-gui-hallo-welt Skript das einfach mal abprueft, ob das Kommando aufzurufen selbst schon so lange dauert (weil das OS aus voellig unerfindlichen Gruenden einen Meldereiter losschickt, um den Python Interpreter zu finden), oder ob es dann im hochziehen der Anwendung begruendet ist.

Re: GUI-Fenster öffnet stark verzögert

Verfasst: Mittwoch 9. Mai 2018, 17:40
von Sophus
@Sirus3: geprofiled? Du meinst, ob ich die Zeit gemessen habe? Aber abseits der Messung. Ist es nicht "logisch", dass eine Python-GUI-Datei wesentlich schneller ist, als wenn man die *ui-Datei dynamisch lädt? Ich meine, bei der Umwandlung reden wir ja von ein sogenanntes statisches Modul - erzeugt vom pyuic-Werkzeug. Hierbei wird nur einmal die Kompilierungsstufe ausführt, während uic es jedes Mal erneut tun muss. Konkret: PyQt muss ja zunächst einmal die *.ui-Datei (die im Grunde eine XML-Datei ist) analysieren und anschließend das Ergebnise in den PyQt-Quelltext umwandeln - und das wird jedes Mal erneut getan, wenn das Programm ausgeführt wird. Mit dem statischen Modul wird das XML-Parsen und die Konvertierung nur einmal zur Kompilierzeit durchgeführt. Danach muss das Programm nur noch das kompilierte Modul importieren.

Verstehe mich nicht falsch. Ich lade die *.ui-Datei auch dynmaisch.

Re: GUI-Fenster öffnet stark verzögert

Verfasst: Mittwoch 9. Mai 2018, 19:52
von __deets__
Der Schlüssel hier ist “wesentlich”. Und die Antwort ist nein. Auch Python muss geparst werden. Und ausgeführt. Wenn das doppelt so schnell ist, oder wegen mir 5mal, dann ist das der Unterschied zwischen einer 10tel und einer halben Sekunde. Beides irrelevant. Die lange Ladezeit muss an was anderem hängen.

Re: GUI-Fenster öffnet stark verzögert

Verfasst: Dienstag 22. Mai 2018, 10:40
von Patrick1990
Habe jetzt mal gemessen mit dem time-Modul an folgender Stelle:

Code: Alles auswählen

def main():
    time_1=time()
    app = QtWidgets.QApplication(sys.argv)   
    gui = MainWindow()                                   
    gui.show()                                                               
    time_2=time()
    print("MDK:"+str(time_2-time_1)) 
    app.exec_() 
Öffnen der ui-Datei: ca. 1,45s
Öffnen der py-Datei (umgewandelte ui-Datei): ca. gleich mit dem Öffnen der ui-Datei (1,4s)

Öffnen mit Batch-Datei (2,8s)

Mit Stoppuhr am Handy messe ich überall ca. die doppelte Zeit.

Re: GUI-Fenster öffnet stark verzögert

Verfasst: Dienstag 22. Mai 2018, 10:47
von Sirius3
Somit ist das Benutzen von ui-Dateien nicht signifikant langsamer. 1,4s zum Erzeugen einer GUI hört sich für mich plausibel an, wo die anderen 1,4s hingehen? Wahrscheinlich ins laden der Bibliotheken.

Das ist aber noch ein gewaltiger Unterschied zu 10s vom Anfang.

Re: GUI-Fenster öffnet stark verzögert

Verfasst: Mittwoch 23. Mai 2018, 08:40
von Patrick1990
Sirius3 hat geschrieben: Dienstag 22. Mai 2018, 10:47 Somit ist das Benutzen von ui-Dateien nicht signifikant langsamer. 1,4s zum Erzeugen einer GUI hört sich für mich plausibel an, wo die anderen 1,4s hingehen? Wahrscheinlich ins laden der Bibliotheken.

Das ist aber noch ein gewaltiger Unterschied zu 10s vom Anfang.
Ja, vermutlich durch die Änderung, dass nur noch benötigte Funktionen geladen werden.
Ich habe jetzt nochmal mit einem Tool genauer geschaut.
Einen Großteil der Zeit benötigt die __init__-Funktion.
Bei einer der GUIs habe ich währenddessen noch eine Excel-Datei ausgelesen und einen Plot davon angefertigt. Das hat auch sehr lange gedauert.
Das Öffnen durch die Batch-Datei ist zwar immernoch etwas langsamer, jedoch komme ich mit dem Tool schon zu brauchbaren Ergebnissen.