python简单线程不工作

2024-09-29 06:24:45 发布

您现在位置:Python中文网/ 问答频道 /正文

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

函数的调用方式如下:

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

在等待窗口中,我有一个名为“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()

但是窗口仍然冻结,窗口等待显示在实现文件和文件夹(self)的末尾,就像我调用了一个普通函数一样

非常感谢你的帮助


Tags: and函数self进程show方式fileswindow
1条回答
网友
1楼 · 发布于 2024-09-29 06:24:45

看起来正在调用worker函数,而不是将其用作进程目标的回调:

process = Process(target=actualize_files_and_folders(self))

这基本上等同于:

tmp = actualize_files_and_folders(self)
process = Process(target=tmp)

因此在主线程中调用worker函数来阻塞它。此函数的结果作为目标传递到进程中,如果它是None,则它将不执行任何操作。您需要将函数本身作为回调传递,而不是其结果:

process = Process(target=actualize_files_and_folders, args=[self])
process.start()

见:https://docs.python.org/2/library/multiprocessing.html

相关问题 更多 >