2

所以我遇到了一个重大问题。我目前正在尝试使用多处理/子处理在我的 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()
4

2 回答 2

1

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

于 2012-06-16T02:24:59.403 回答
1

我发现了问题(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 不能继续它的主循环。这可以通过使用Popen.

于 2012-06-16T02:35:28.140 回答