Python 实例化QApplication后我的代码出现性能问题

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

我正在开发一个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.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。但是您的脚本不会启动事件循环,因此这并不相关。