协助理解Qthread和信号。 (Pyside)

时间:2013-09-18 06:34:51

标签: python pyside qthread

我想了解如何进行Qthread并且我有这个骨架代码。我的主要目标是在后端执行某些数据库操作时不让GUI“挂起”,同时更新GUI中的表小部件。 背景:在Windows操作系统上执行此操作。 Pyside作为GUI。 (我也尝试过Python线程,但每次我的应用程序崩溃时)

class GenericThread(QtCore.QThread):
    def __init__(self, function, *args, **kwargs):
        QtCore.QThread.__init__(self)
        self.function = function
        self.args = args
        self.kwargs = kwargs

    def __del__(self):
        self.wait()

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

clas myMainGUI(...)
     def add(self):
         ...
         for myfiles in os.listdir(..): <--- intensive process, lots of files
             column headers = [ .... ]
             result = select_data_from_file(myfiles)  <----- database file processing
             self.insert_table_widget ( column headers, result )  <--want to insert to widge in "realtime" and do other stuff without GUI getting "hang"
             ....
             self.mythread.emit()   <-- ??

     def coolie(self): # some button will call this function.
         if buttonclick == "add": 
            self.mythread = GenericThread(self.add)
            self.mythread.disconnect() <------??
            self.mythread.connect()  <------ ??
            self.mythread.start() 

任何想法我的emit(),connect()或disconnect()应该如何?感谢

1 个答案:

答案 0 :(得分:0)

我建议不要与你的GUI并行使用线程,除非你正在做一些I / O或者你正在使用的库释放GIL。它们只会减慢速度。

要么坚持使用串行方法,事情会比你当前的实现更快地完成(在我的应用程序中,通过使用线程处理,我几乎快了2倍)。并遵循python加速提示,如here

否则您可以使用multiprocessing模块。