2009-05-18 4 views
2

Meine PyQt-Anwendung, die matplotlib verwendet, benötigt mehrere Sekunden zum ersten Mal, auch auf einer schnellen Maschine (die zweite Ladezeit ist viel kürzer, da die DLLs im Speicher gehalten werden) Windows).PyQt: Splash-Screen beim Laden von "schweren" Bibliotheken

Ich frage mich, ob es möglich ist, einen Begrüßungsbildschirm anzuzeigen, während die matplotlib Bibliothek geladen wird. Wo findet das eigentliche Laden statt - ist es, wenn die from Zeile ausgeführt wird? Wenn ja, wie kann ich diese Zeile während des Begrüßungsbildschirms ausführen lassen und trotzdem das Modul im gesamten Code verwenden?

Ein verwandtes Dilemma ist, wie man das testet - kann ich Windows bitten, die DLLs für jede Ausführung zu laden und sie nicht zwischenzuspeichern?

Antwort

2

Ja, das Laden des Moduls findet an der Zeile statt, an der sich die Importanweisung befindet. Wenn Sie Ihre QApplication erstellen und Ihren Splash-Bildschirm vorher anzeigen, sollten Sie in der Lage sein, zu tun, was Sie wollen - Sie müssen auch QApplication.processEvents() aufrufen, wenn Sie den Begrüßungsbildschirm benötigen, um mit einer neuen Nachricht zu aktualisieren.

+0

Aber wie kann ich die Importe für Top-Level-Code sichtbar machen? Um die Importe nach einem Splash-Screen zu verzögern, sollte ich sie innerhalb einer Methode/Funktion ausführen - das verursacht das Sichtbarkeitsproblem –

+0

@eliben: Sie sollten den ersten Import der "schweren" Module innerhalb der Funktion/Methode haben. Dann werden sie beim nächsten Import (von der obersten Ebene der anderen Module) nicht geladen, sondern nur in sys.modules nachgeschlagen, was sehr schnell ist. –

Verwandte Themen