私が開発しているIOモジュールに問題があり、ファイル形式(ASCIIベース)でデータにアクセスしています。QApplicationのインスタンス化後のコードでのパフォーマンスの問題
通常のPythonスクリプトで使用するとOKですが、PyQtウィジェットで使用しようとすると5倍遅くなります。
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)
app = QApplication([])
は50秒かかり後の最初のブロックは、第同じブロックしながら、10秒かかる。
これは問題を示す簡略化されたコードです。 アプリケーションのインスタンス化の前後に複数のコードを繰り返すことができます。アプリケーションを初期化する前のブロックはすべて比較的高速ですが、後のすべてのブロックは遅いです。
行a = f["1.1/measurement/mca_0/data"]
は、CythonでラップされたC関数を介してデータファイルに78026回アクセスし、そのたびに1つの "行"を読み込みます。返されるオブジェクトは、形状(78026,1024)およびdtype float64のnumpy配列です。
誰かがこれを引き起こす可能性についての手がかりを持っていますか? QtとラップされたCコードの間に既知の問題や干渉はありますか?
あなたのOSとあなたのPython環境の詳細が参考になるかもしれません。 – user3419537
「QCoreApplication」を使用して違いがありますか? – ekhumoro
Debian 8では、Python 2.7.9とPython 3.4.2の両方で問題が示されています。私はPyQt4とPyQt5もテストしましたが、違いはありません。 – PiRK