GUI stoppt wenn main.after zuviel Zeit benötigt
Verfasst: Sonntag 1. April 2012, 01:26
Hallo,
eine Funktion die per main.after gestartet wird, benötigt mehrere Sekunden (> 100 Sekunden) zur Ausführung. Wärend dieser Zeit friert die GUI ein.
Der Ansatz ist mir klar.Mit main.after(... soll eine Funktion nach einem timeout von x ms gestartet werden. Diese Funktion sollte nach Möglichkeit so gestaltet werden, das sie wenig Systemzeit benötigt. Also eher zehnmal aufgerufen werden muß um eine Aufgabe zu erledigen, statt einmal aufgerufen zu werden und das zehnfache an Zeit zu benötigen. Weil eben die GUI solange einfriert.
Die Funktion die ich per main.after aufrufe, liest Daten aus einer Datei und übergibt diese an einen Server (arbeite mit urllib). Also etwas was schon allein wegen des Protokolloverheads nicht in einzelne kleine Schritte zerlegt werden sollte.
Inzwischen habe ich mit main.after bzw. frame1.after und auch after_idle experimentiert. Die GUI friert aber immer ein. Bleibt hier nur der Weg mit thread zu arbeiten und eine Queue für die Fortschritsanzeige zu verwenden?
Hier im Forum habe ich gesucht, natürlich auch mit google. Mir fehlen offensichtlich die richtigen Schlagworte/Suchbegriffe. Ich denke mein Problem ist nicht neu. Wie geht ihr an die Lösung dieser Aufgabe heran?
Gruß Marcia
eine Funktion die per main.after gestartet wird, benötigt mehrere Sekunden (> 100 Sekunden) zur Ausführung. Wärend dieser Zeit friert die GUI ein.
Der Ansatz ist mir klar.Mit main.after(... soll eine Funktion nach einem timeout von x ms gestartet werden. Diese Funktion sollte nach Möglichkeit so gestaltet werden, das sie wenig Systemzeit benötigt. Also eher zehnmal aufgerufen werden muß um eine Aufgabe zu erledigen, statt einmal aufgerufen zu werden und das zehnfache an Zeit zu benötigen. Weil eben die GUI solange einfriert.
Die Funktion die ich per main.after aufrufe, liest Daten aus einer Datei und übergibt diese an einen Server (arbeite mit urllib). Also etwas was schon allein wegen des Protokolloverheads nicht in einzelne kleine Schritte zerlegt werden sollte.
Inzwischen habe ich mit main.after bzw. frame1.after und auch after_idle experimentiert. Die GUI friert aber immer ein. Bleibt hier nur der Weg mit thread zu arbeiten und eine Queue für die Fortschritsanzeige zu verwenden?
Hier im Forum habe ich gesucht, natürlich auch mit google. Mir fehlen offensichtlich die richtigen Schlagworte/Suchbegriffe. Ich denke mein Problem ist nicht neu. Wie geht ihr an die Lösung dieser Aufgabe heran?
Gruß Marcia