Python 实例化QApplication后我的代码出现性能问题
我正在开发一个IO模块,用于访问文件格式(基于ASCII)的数据,该模块存在问题 在常规python脚本中使用时,它的性能正常,但在PyQt小部件中使用时,它的速度要慢5倍 这是显示问题的简化代码:Python 实例化QApplication后我的代码出现性能问题,python,pyqt,cython,Python,Pyqt,Cython,我正在开发一个IO模块,用于访问文件格式(基于ASCII)的数据,该模块存在问题 在常规python脚本中使用时,它的性能正常,但在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.tim
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)
第一个块需要10秒,而app=QApplication([])
之后的第二个相同的块需要50秒。
我可以在应用程序实例化前后重复几次代码,初始化应用程序之前的所有块都相对较快,而初始化应用程序之后的所有块都较慢
行a=f[“1.1/measurement/mca_0/data”]
通过Cython包装的C函数访问数据文件78026次,每次读取一行。返回的对象是一个shape(780261024)和dtype float64的numpy数组
有人知道是什么导致了这一切吗?Qt和包装的C代码之间是否存在已知问题/干扰?一位同事终于找到了根本原因 如果语言环境不是“C”默认语言环境,则底层C库会做一些额外的工作(请参阅)。 和
QApplication
将区域设置设置为“en_US.UTF-8”
因此,我可以在不使用QApplication
的情况下复制问题:
import locale
with ...:
do the work
locale.setlocale(locale.LC_NUMERIC, 'en_US.UTF-8')
with ...:
same work, much slower
对于这个非常具体的问题,我很抱歉。我希望有关
QApplication([])
修改区域设置的信息能够帮助将来的人。一位同事终于找到了根本原因
如果语言环境不是“C”默认语言环境,则底层C库会做一些额外的工作(请参阅)。
和QApplication
将区域设置设置为“en_US.UTF-8”
因此,我可以在不使用QApplication
的情况下复制问题:
import locale
with ...:
do the work
locale.setlocale(locale.LC_NUMERIC, 'en_US.UTF-8')
with ...:
same work, much slower
对于这个非常具体的问题,我很抱歉。我希望有关
QApplication([])
修改区域设置的信息将来能对某人有所帮助。您的操作系统和python环境的详细信息可能会有所帮助。使用QCoreApplication
会有所不同吗?Debian 8、python 2.7.9和python 3.4.2都显示了这个问题。我还测试了PyQt4和PyQt5,没有区别。如果我将QApplication
替换为QCoreApplication
,问题仍然相同。事件循环正在减慢我的模块速度。@PiRK。但是您的脚本没有启动事件循环,因此这是不相关的。您的操作系统和python环境的详细信息可能会有帮助。使用QCoreApplication
会有所不同吗?Debian 8,python 2.7.9和python 3.4.2都显示了这个问题。我还测试了PyQt4和PyQt5,没有区别。如果我将QApplication
替换为QCoreApplication
,问题仍然相同。事件循环正在减慢我的模块速度。@PiRK。但是您的脚本不会启动事件循环,因此这并不相关。