多处理/子处理时,Tkinter GUI冻结

时间:2012-06-16 02:23:08

标签: python subprocess

所以我遇到了一个重大问题。我目前正在尝试使用多处理/子处理来运行我的Tkinter应用程序旁边的文件,但是,只要我运行该进程,GUI就会冻结,直到我完成该过程。有没有办法解决这个问题?我也查了关于SO的其他问题,但无济于事(我发现有人提出root.update(),但是没有按预期工作。

注意:我没有包含GUI元素,因为我已经制作了基本程序来尝试这个(只有几行)并得到同样的问题。值得注意的是我正在运行Windows。

代码(脱离上下文):

def run_file(self):
    self.root.update()
    sub_process=subprocess.call(self.sub_proc_args)

process=multiprocessing.Process(target=self.run_file())
process.start()

2 个答案:

答案 0 :(得分:1)

通过执行self.run_file(),您在多处理之前调用run_file可以使用它。您需要使用target=self.run_file(注意,没有括号)。

答案 1 :(得分:0)

我找到了问题(除了BrenBarn指出的目标问题)。这是我的修复:

(我拿出了多处理。)

def run_file(self):
    sub_process=subprocess.Popen(self.sub_proc_args) #Open subprocess
    self.root.update() #Update GUI    
self.run_file() #Initiate sub_process

我发现这是修复因为使用调用,当你执行它时,它必须返回一个返回值,这使得Tkinter不能继续它的mainloop。使用Popen确定了这一点。