我想了解如何进行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()应该如何?感谢
答案 0 :(得分:0)
我建议不要与你的GUI并行使用线程,除非你正在做一些I / O或者你正在使用的库释放GIL。它们只会减慢速度。
要么坚持使用串行方法,事情会比你当前的实现更快地完成(在我的应用程序中,通过使用线程处理,我几乎快了2倍)。并遵循python加速提示,如here。
否则您可以使用multiprocessing
模块。