Python 2 到 Python 3:无法使多处理工作
Python 2 to Python 3: can't get multiprocessing to work
我正在将我的代码从 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 社区论坛上发了一个 post 但更多的是关于它是否是 Anaconda 的问题而不是代码本身。
附加信息:
对于 Python 2.7/3.5 的主进程(非工作者),sys.path[0]=''
无论 console/python 版本如何
有趣的是 sys.path[0] 因工作进程而异:
Spyder 2.3.8 (Python 2.7)
- Python 控制台:''(有效)
- IPython 控制台:''(有效)
Spyder 2.3.8 (Python 3.5)
- Python 控制台:'C:\Users\hobboy\Documents\project'(有效)
- IPython 控制台:'C:\WINDOWS\system32'(不起作用)
但是 Python 2 和 3 的主要(非工作)进程都是 sys.path=''
。为什么 sys.path[0] 在 Python 3
中设置不同(且不一致)
看看在脚本的第一行添加以下代码后得到的结果:
import sys; print(sys.path)
输出应该包括您的 "somemodule" 所在的目录。如果未列出,您可以在导入模块之前通过将目录附加到 sys.path 列表(小心转义反斜杠)来明确地操纵您的环境。
另一种方法是确保 python 解释器直接来自该文件夹 运行,以便 "working directory" 包含 somemodule.py.
我正在将我的代码从 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 社区论坛上发了一个 post 但更多的是关于它是否是 Anaconda 的问题而不是代码本身。
附加信息:
对于 Python 2.7/3.5 的主进程(非工作者),sys.path[0]=''
无论 console/python 版本如何
有趣的是 sys.path[0] 因工作进程而异:
Spyder 2.3.8 (Python 2.7)
- Python 控制台:''(有效)
- IPython 控制台:''(有效)
Spyder 2.3.8 (Python 3.5)
- Python 控制台:'C:\Users\hobboy\Documents\project'(有效)
- IPython 控制台:'C:\WINDOWS\system32'(不起作用)
但是 Python 2 和 3 的主要(非工作)进程都是 sys.path=''
。为什么 sys.path[0] 在 Python 3
看看在脚本的第一行添加以下代码后得到的结果:
import sys; print(sys.path)
输出应该包括您的 "somemodule" 所在的目录。如果未列出,您可以在导入模块之前通过将目录附加到 sys.path 列表(小心转义反斜杠)来明确地操纵您的环境。
另一种方法是确保 python 解释器直接来自该文件夹 运行,以便 "working directory" 包含 somemodule.py.