PyQt Qthread在运行时被破坏,正确的退出方式

时间:2017-10-29 09:30:17

标签: python multithreading pyqt4

我是python / PyQt的新手,因此深入了解工作线程。 我有以下代码用于在工作线程上运行函数,让主线程空闲。我的工作线程如下所示:

from PyQt4 import QtCore

class my_worker_thread(QtCore.QThread):
'''
a worker thread
'''

    def __init__(self,function, *args, **kwargs):
        QtCore.QThread.__init__(self)
        self.exiting=False
        self.function=function
        self.args=args
        self.kwargs=kwargs

    def __del__(self):
        self.exiting=True
        self.wait()

    def run(self):
        self.function(*self.args,**self.kwargs)
        return

在这种情况下,我产生了许多工人来处理文件(大约1000个txt文件),主线程读取单个父文件,列出了需要读取的所有文件。 对于父文件中的每一行,我生成一个工作线程,以便工作者可以处理该文件。 父级可能在多行中具有相同的文件,因此工作人员可能不得不多次处理文件。

调用逻辑是这样的:

def main_caller(self):
    #For each line in parent file spawn a thread to process the file
    for line in parent_file:
        process_file=my_worker_thread(self.get_file_information,line)
        process_file.start()

到目前为止它有点工作,但我确实得到以下错误,这会导致程序崩溃

  

QThread:线程必须自行等待

     

QThread:在线程仍在运行时保持原状

我想了解我做错了什么。

首先,如何让工作线程在完成工作后安全退出?

何时调用worker中的 del 函数?

我应该在某处没有退出()吗?或退出()

  

现在退出工作人员已完成所有工作

     

worker.exit()

我不确定该线程是否被彻底终止,我将不胜感激任何有关如何使用接受任何简单函数,执行函数,返回并完全停止的泛型工作者的建议

如果有所不同,我在Windows上使用PyQt4。

0 个答案:

没有答案