Mein Programm interagiert mit einer API, führt Berechnungen aus und erstellt ein Gui mit Informationen, von denen einige in lokalen Dateien gespeichert werden (um Informationen zu erhalten zwischen Logins). Wenn cProfile mit meinem Code profilieren, erhalte ich die folgende Ausgabe:Ich denke, mein Programm ist durch Datei-I/O blockiert, und ich brauche eine bessere Lösung
C:\Users\cheek\Documents\Code\LoL-Performance-Tracker>python -m cProfile -s tottime LoL-Performance-Tracker.py
LoL-Performance-Tracker.py:271: SyntaxWarning: name 'apiKey' is used prior to global declaration
global apiKey
Entered buildMatchHistory
262880 function calls (261634 primitive calls) in 11.867 seconds
Ordered by: internal time
ncalls tottime percall cumtime percall filename:lineno(function)
161 8.684 0.054 8.684 0.054 decoder.py:370(raw_decode)
1 1.100 1.100 1.100 1.100 {question}
1 0.694 0.694 1.794 1.794 {built-in method exec_}
1 0.506 0.506 9.848 9.848 LoL-Performance-Tracker.py:88(buildMatchHistory)
168 0.361 0.002 0.361 0.002 {method 'read' of 'file' objects}
84 0.073 0.001 0.149 0.002 ConfigParser.py:464(_read)
1 0.040 0.040 11.867 11.867 LoL-Performance-Tracker.py:7(<module>)
80 0.035 0.000 9.323 0.117 MatchHistoryBuilder.py:37(buildMatch)
161 0.026 0.000 9.074 0.056 __init__.py:258(load)
251 0.025 0.000 0.025 0.000 {open}
1 0.023 0.023 0.023 0.023 {built-in method show}
23338 0.019 0.000 0.019 0.000 {method 'match' of '_sre.SRE_Pattern' objects}
23176 0.017 0.000 0.017 0.000 collections.py:59(__setitem__)
2 0.016 0.008 0.016 0.008 {built-in method setWidget}
84 0.010 0.000 0.010 0.000 {built-in method setStyleSheet}
11844 0.008 0.000 0.008 0.000 {method 'readline' of 'file' objects}
1 0.006 0.006 11.704 11.704 LoL-Performance-Tracker.py:326(main)
...
Die buildMatchHistory Methode ist das, was ich dachte, das Problem wäre, weil es GUI-Objekte erstellt und im Allgemeinen ziemlich umständlich ist, aber es scheint nicht, sein.
Ich verwende einen Json-Encoder/Decoder, um Datei-I/O mit einer guten Menge an Informationen durchzuführen. Ich würde nicht denken, dass es mehrere Sekunden dauern würde, um diese Operationen auszuführen, aber es sieht so aus. Bin ich in meinem Verständnis dieser Ausgabe richtig? Wenn nicht, wo sollte ich stattdessen suchen?
Wenn ich recht habe, was ist eine bessere Lösung für das Ziehen und Speichern von Informationen zwischen Logins?
Sie interpretieren die Ergebnisse korrekt. Wie viele Dateien speichern Sie?Wenn die Zielinformationen über viele Dateien verteilt sind, kann es zu einer gewissen Geschwindigkeitssteigerung kommen, wenn die Lesevorgänge mit Multiprocessing parallelisiert werden. – skrrgwasme
Die Profiler-Ausgabe wäre zusammen mit dem Code viel hilfreicher. –
Soll ich nur den Code posten oder einen Link zu einem Pastebin hinzufügen oder? –