Я перемещаю свой код с 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'
Код работает в Python Console Spyder, но не в IPython (работает с Anaconda3 2.5.0). Рабочие процессы не могут импортировать somemodule
, но основной процесс может. Это как-то связано с неадекватностью import somemodule
или с чем-то другим? Я немного прочитал синтаксис импорта Python 3, но я все еще не уверен.
Я сделал сообщение на форумах сообщества Anaconda, но это больше касается того, связана ли проблема с Anaconda, а не с самим кодом.
Дополнительная информация:
Для основного процесса (не рабочего) для Python 2.7/3.5 sys.path[0]=''
независимо от версии консоли/питона
Интересно, что 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