J'ai un problème avec un module d'E/S que je suis en train de développer pour accéder aux données dans un format de fichier (ASCII).Problème de performances avec mon code après l'instanciation de QApplication
Il fonctionne correctement lorsqu'il est utilisé dans un script python standard, mais il est 5 fois plus lent lorsque j'essaie de l'utiliser dans un widget PyQt.
Voici le code simplifié qui montre la question:
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)
Le premier bloc 10 secondes, tandis que le second bloc identique, après app = QApplication([])
prend 50 secondes. Je peux répéter le code plusieurs avant et après l'instanciation de l'application, et tous les blocs avant d'initialiser l'application sont relativement rapides alors que tous les blocs après elle sont lents.
La ligne a = f["1.1/measurement/mca_0/data"]
provoque l'accès au fichier de données 78026 fois via une fonction C encapsulée avec Cython, pour lire une seule "ligne" à chaque fois. Les objets renvoyés sont un tableau numérique de forme (78026, 1024) et dtype float64.
Quelqu'un at-il une idée de ce qui pourrait causer cela? Y a-t-il des problèmes/interférences connus entre Qt et le code C enveloppé?
Votre système d'exploitation et les détails de votre environnement python peuvent être utiles ici – user3419537
L'utilisation de 'QCoreApplication' peut-elle faire la différence? – ekhumoro
Debian 8, à la fois Python 2.7.9 et Python 3.4.2 montrent le problème. J'ai également testé PyQt4 et PyQt5, aucune différence. – PiRK