Python多处理模块处理引发运行时错误并且什么都不做

时间:2014-07-16 15:59:14

标签: python python-2.7 multiprocessing

我正在尝试在python 2.7中使用多处理模块来创建一个带有wxpython的gui,它在一个用matplotlib绘制图形的过程中调用一个单独的模块。但是每当它调用该模块时,gui只会打开一份自己的副本。接下来我尝试在一个简单的例子中使用多处理模块。在IDLE中,似乎可以很好地启动流程,但这些流程实际上并没有运行。当我从命令行运行代码时会引发attributeerror,但是当我将所有multiproccessing.Process切换到threading.Thread时,代码工作正常

继承命令行代码: http://imgur.com/QuCUWRD

之前我已经测试了这个模块,它似乎有效,所以我可能只是在做一些愚蠢的事情,但我根本无法弄清楚我的错误!

编辑:

在我的GUI中更改

中的行
queue_thread = multiprocessing.Process(
            target=simple_queue_model.main_func, args = (self.inputs,))

为:

queue_thread = multiprocessing.Process(
            target=simple_queue_model.main_func(self.inputs))

导致进程被调用,但主GUI窗口冻结,直到进程完成运行,并且再次打开一个新的gui窗口,我不明白。

编辑2: 之前的更改只会导致我的GUI将main_func作为一个单独的进程调用。行queue_thread.start()是导致新GUI生成的原因,因此整个模块对我来说根本不起作用

1 个答案:

答案 0 :(得分:2)

当您在Windows上使用multiprocessing启动新进程时,将启动一个全新的处女python进程,然后导入所需的各种模块并使用pickle传递变量。在这种情况下,您已在交互式会话的__main__命名空间中定义了您的函数。要使它们运行,请将它们保存到可以从新进程导入y =的模块。请务必参考guidelines

相反,线程可以共享内存,并直接从当前命名空间传递函数定义。