多处理程序在Anaconda笔记本中具有AttributeError

San*_*noj 7 python anaconda python-multiprocessing

我在Windows 7 64位上运行一个简单的"Hello World"程序,其规格如下:

Python 3.4.3 | Anaconda 2.3.0 (64-bit) | [MSC v.1600 64 bit (AMD64)] IPython 4.0.0
Run Code Online (Sandbox Code Playgroud)

该程序:

from multiprocessing import Process, freeze_support

def f():
    print ('hello world!')

if __name__ == '__main__':
    #freeze_support()
    Process(target=f).start()
Run Code Online (Sandbox Code Playgroud)

给出以下错误:

[I 15:02:23.855 NotebookApp] Saving file at /uhc/FeatureContributionToK-meansClu
sterWithPC.ipynb
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "C:\Anaconda3\lib\multiprocessing\spawn.py", line 106, in spawn_main
    exitcode = _main(fd)
  File "C:\Anaconda3\lib\multiprocessing\spawn.py", line 116, in _main
    self = pickle.load(from_parent)
AttributeError: Can't get attribute 'f' on module '__main__' (built-in)  
Run Code Online (Sandbox Code Playgroud)

Aru*_*raj 5

这是由于以下事实:在交互式解释器中,多重处理效果不佳。主要原因是在Windows中没有适用的fork()函数。在他们的网页上对此进行了说明。

“此包中的功能要求子模块必须可导入模块。这在编程指南中已涉及到,但是在这里值得指出。这意味着某些示例,例如多处理。池示例在交互式环境中不起作用。口译员。”

https://docs.python.org/2/library/multiprocessing.html#windows

如果在多处理中使用池功能,也会出现同样的问题。在这篇文章中已解决。因此,您可以使用该方法执行并行处理的想法。

Python多重处理apply_async永远不会在Windows 7上返回结果

希望它对您有用。