我正在尝试使用新线程或多处理来运行函数。
该函数的调用如下:
Actualize_files_and_folders(self)
我已经阅读了很多有关多处理和线程的信息,并在StackOverflow上查看问题,但我无法使其正常工作......如果有一些帮助>那将会非常棒。<
我用按钮调用该功能。
def on_button_act_clicked(self, menuitem, data=None):
self.window_waiting.show()
Actualize_files_and_folders(self)
self.window_waiting.hide()
在waiting_window中我有一个名为'cancel'的按钮,如果我有一个可以杀死线程的命令/功能,那将会很棒。
我尝试过很多东西,例如:
self.window_waiting.show()
from multiprocessing import Process
a=Process(Target=Actualize_files_and_folders(self))
a.start()
a.join()
self.window_waiting.hide()
但窗口仍然冻结,window_waiting显示在Actualize_files_and_folders(self)的末尾,就像我调用了普通函数一样。
非常感谢您的帮助!!
答案 0 :(得分:0)
看起来正在调用worker函数而不是用作进程目标的回调:
process = Process(target=actualize_files_and_folders(self))
这基本上相当于:
tmp = actualize_files_and_folders(self)
process = Process(target=tmp)
因此在阻塞它的主线程中调用worker函数。该函数的结果作为目标传递给Process,如果它是None,它将不执行任何操作。您需要将函数本身作为回调传递,而不是结果:
process = Process(target=actualize_files_and_folders, args=[self])
process.start()