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

Python Multiprocessing module processes raising runtime error and do nothing

我试图在python 2.7中使用多处理模块来创建一个带有wxpython的GUI,它在一个将用matplotlib绘制图形的进程中调用一个单独的模块。但是每次调用该模块时,GUI都会打开inself的副本。接下来,我尝试在一个简单的例子中使用多处理模块。在空闲状态下,它似乎可以很好地启动进程,但进程实际上并不运行。当我从命令行运行代码时,会引发一个attributeError,但当我将所有multiprocessing.process切换到threading.thread时,代码工作正常。

以下是命令行代码:http://imgur.com/qucuwrd

我以前测试过这个模块,它似乎已经工作了,所以我可能只是做了一些愚蠢的事情,但是我根本无法找出我的错误!

编辑:

在我的图形用户界面中更改

1
2
queue_thread = multiprocessing.Process(
            target=simple_queue_model.main_func, args = (self.inputs,))

到:

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

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

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


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

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