python简单的线程无法正常工作

时间:2014-06-11 16:40:17

标签: python multithreading multiprocessing

我正在尝试使用新线程或多处理来运行函数。

该函数的调用如下:

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)的末尾,就像我调用了普通函数一样。

非常感谢您的帮助!!

1 个答案:

答案 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()

请参阅:https://docs.python.org/2/library/multiprocessing.html