我將我的代碼從Python 2.7移動到python 3.5,無法讓我的多重處理代碼工作,如下面的代碼。 「somemodule.py」與主腳本位於同一目錄中。Python 2到Python 3:無法讓多重處理工作
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]=''
不管控制檯/ 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'(works)
- IPython控制檯:'C:\ WINDOWS \ system32'(不起作用)
但是Python 2和Python 3的主要(非工作者)進程是sys.path=''
。爲什麼是的sys.path [0]被設置不同(不一致)在Python 3
你把somemodule.py放在哪裏? – Yen
@Yen對不起,我可能不夠清楚,somemodule.py與腳本位於同一目錄中。我已更新該帖子以澄清。 – hobboy