Python 2到Python 3:无法使多处理工作

时间:2016-03-14 03:08:30

标签: python python-3.x anaconda python-multiprocessing

我将我的代码从python 2.7移动到python 3.5并且无法使我的多处理代码工作,类似于以下代码。的" somemodule.py"在与主脚本相同的目录中

import multiprocessing as mp

# somemodule is in the same folder as this script
import somemodule

def foo(bar):
    print(bar)
    return

if __name__ == '__main__':
    bar = ("alice","bob")
    pool = mp.Pool(processes=2)
    pool.map(foo, bar)
    pool.close()

追溯是

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 115, in _main
    prepare(preparation_data)
  File "C:\Anaconda3\lib\multiprocessing\spawn.py", line 226, in prepare
    _fixup_main_from_path(data['init_main_from_path'])
  File "C:\Anaconda3\lib\multiprocessing\spawn.py", line 278, in _fixup_main_from_path
    run_name="__mp_main__")
  File "C:\Anaconda3\lib\runpy.py", line 240, in run_path
    pkg_name=pkg_name, script_name=fname)
  File "C:\Anaconda3\lib\runpy.py", line 96, in _run_module_code
    mod_name, mod_spec, pkg_name, script_name)
  File "C:\Anaconda3\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "C:\Users\hobboy\Documents\project\pool_test3.py", line 2, in <module>
    import somemodule
ImportError: No module named 'somemodule'

代码适用于Spyder的Python控制台,但不适用于IPython(使用Anaconda3 2.5.0)。 工作进程无法导入somemodule,但主进程可以。这与import somemodule不足或其他什么有关吗?我稍微阅读了Python 3导入语法,但我还是不确定。

我已经在Anaconda社区论坛上发帖了,但更多的是关于它是否是Anaconda的问题,而不是代码本身。

其他信息:

对于Python 2.7 / 3.5的主进程(非工作者),sys.path[0]='',无论console / python版本

有趣的是sys.path [0]因工作进程而异:

Spyder 2.3.8(Python 2.7)

  • Python控制台:&#39;&#39; (作品)
  • IPython控制台:&#39;&#39; (作品)

Spyder 2.3.8(Python 3.5)

  • Python控制台:&#39; C:\ Users \ hobboy \ Documents \ project&#39; (作品)
  • IPython控制台:&#39; C:\ WINDOWS \ system32&#39; (没有工作)

然而,Python 2和3的主要(非工作者)进程为sys.path=''。为什么在Python 3中设置sys.path [0]的方式不同(且不一致)

1 个答案:

答案 0 :(得分:3)

看看在脚本的第一行添加以下代码时得到的结果:

import sys; print(sys.path)

输出应该包含你的&#34; somemodule&#34;是。如果未列出,则可以通过在导入模块之前将目录附加到sys.path列表(小心转义反斜杠)来显式操作环境。

另一种方法是确保python解释器直接从该文件夹运行,以便&#34;工作目录&#34;包括somemodule.py。