Ich habe ein Problem mit einem IO-Modul, das ich entwickle, um auf Daten in einem Dateiformat (ASCII-basiert) zuzugreifen.Leistungsproblem mit meinem Code nach der Instantiierung von QApplication
Es führt OK aus, wenn es in einem regulären Python-Skript verwendet wird, aber es ist 5 mal langsamer, wenn ich versuche, es in einem PyQt-Widget zu verwenden.
Dies ist der vereinfachte Code, der das Problem zeigt:
from silx.io import spech5
import time
from PyQt4.QtGui import QApplication
with spech5.SpecH5("../data/mesh_and_mca.dat") as f:
start = time.time()
a = f["1.1/measurement/mca_0/data"]
end = time.time()
print("Simple access in python ", end - start)
app = QApplication([])
with spech5.SpecH5("../data/mesh_and_mca.dat") as f:
start = time.time()
a = f["1.1/measurement/mca_0/data"]
end = time.time()
print("Access after initializing QApplication ", end - start)
Der erste Block dauert 10 Sekunden, während der zweite identisch Block nach app = QApplication([])
50 Sekunden dauert. Ich kann den Code mehrere vor und nach der Instanziierung der App wiederholen, und alle Blöcke vor der Initialisierung der App sind relativ schnell, während alle nachfolgenden Blöcke langsam sind.
Die Zeile a = f["1.1/measurement/mca_0/data"]
bewirkt, dass die Datendatei 78026 Mal über eine mit Cython eingewickelte C-Funktion aufgerufen wird, um jeweils eine einzelne "Zeile" zu lesen. Die zurückgegebenen Objekte sind ein numpliges Array von Form (78026, 1024) und dtype float64.
Hat jemand eine Ahnung, was das verursachen könnte? Gibt es bekannte Probleme/Interferenzen zwischen Qt und gewickeltem C-Code?
Ihr Betriebssystem und Details Ihrer Python-Umgebung könnten hier hilfreich sein – user3419537
Macht die Verwendung von 'QCoreApplication' einen Unterschied? – ekhumoro
Debian 8, Python 2.7.9 und Python 3.4.2 zeigen das Problem. Ich habe auch PyQt4 und PyQt5 getestet, kein Unterschied. – PiRK