1

我一直在尝试优化我的应用程序,虽然我在自己分析它时使该函数平均运行 10.06 秒,但当它放在 a 上时QThread,它大约需要 17-22 秒。

QThread. _ _ 我该如何解决?

该函数实际上正在初始化一个名为 的类DocxDocument,这是我从 Word 文件中读取并根据需要对其进行解析的文档。

我有一个QThread创建此类并使用 Qt 信号将进度信息发送回 GUI。这是该类的代码:

class DocxImporterThread(QThread):
'''
This thread is used to import a .docx document, report its progress, and
then return the document that it parsed.
'''
reportProgress = pyqtSignal(int)
reportError = pyqtSignal(Exception, str)
reportText = pyqtSignal(str)

def __init__(self, filePath):
    QThread.__init__(self)
    self.setPriority(QThread.HighestPriority)
    self._filePath = filePath
    self._docx = None
    self._html = ''
    self._bookmarks = None
    self._pages = None
    self._stop = False

def run(self):

    def myProgressHook(percentage):
        self.reportProgress.emit(percentage)

    def myCancelHook():
        return self._stop

    try:
        self._docx = DocxDocument(self._filePath, myProgressHook, myCancelHook)

        if not self._stop:
            self._html = self._docx.getMainPage()
            self._bookmarks = self._docx.getHeadings()
            self._pages = self._docx.getPages()

    except Exception as ex2:
        print 'ERROR: The .docx document didn\'t import.'
        self.reportError.emit(ex2, traceback.format_exc())

getMainPage(),getHeadings()和是瞬时的,getPages()因为它们只是返回对构造函数已经创建的东西的引用。这是我用来分析我的DocxDocument班级的代码:

testFile = 'some_file.docx'
statSave = 'profile.out'

def progress(percent):
    print ' --', percent, '--'

cProfile.run('DocxDocument(testFile)', filename=statSave)
myStats = pstats.Stats(statSave)
myStats.sort_stats('cumulative', 'name')
myStats.print_stats()

感谢您花时间看这个!

4

0 回答 0