windows 尝试 python 多处理时出现运行时错误
RuntimeError on windows trying python multiprocessing
我将转储我在尝试 python 脚本时得到的错误代码:
预先预处理验证数据
使用GPU设备0:Tesla K20c
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "C:\SciSoft\WinPython-64bit-2.7.6.4\python-2.7.6.amd64\lib\multiprocessing\forking.py", line 380, in main
prepare(preparation_data)
File "C:\SciSoft\WinPython-64bit-2.7.6.4\python-2.7.6.amd64\lib\multiprocessing\forking.py", line 495, in prepare
'__parents_main__', file, path_name, etc
File "C:\Users\Administrator\Desktop\Galaxy Data\kaggle-galaxies-master\kaggle-galaxies-master\try_convnet_cc_multirotflip_3x69r45_maxout2048_extradense.py", line 133, in <module>
for data, length in create_valid_gen():
File "load_data.py", line 572, in buffered_gen_mp
process.start()
`文件 "C:\SciSoft\WinPython-64bit-2.7.6.4\python-2.7.6.amd64\lib\multiprocessing\process.py",第 130 行,开始
self._popen = Popen(self)
文件 "C:\SciSoft\WinPython-64bit-2.7.6.4\python-2.7.6.amd64\lib\multiprocessing\forking.py",第 258 行,在 init 中
cmd = get_command_line() + [rhandle]
文件 "C:\SciSoft\WinPython-64bit-2.7.6.4\python-2.7.6.amd64\lib\multiprocessing\forking.py",第 358 行,在 get_command_line`
中
is not going to be frozen to produce a Windows executable.''')
运行时错误:
尝试在当前进程之前启动一个新进程
已完成引导阶段。
This probably means that you are on Windows and you have
forgotten to use the proper idiom in the main module:
if __name__ == '__main__':
freeze_support()
...
The "freeze_support()" line can be omitted if the program
is not going to be frozen to produce a Windows executable.
据我所知,我必须插入一行
if __name__ == '__main__':
一些让它工作的地方
谁能告诉我应该将它插入到哪个文件中?我已将受影响的文件列表包含在初始错误日志中
受影响的文件:
第 131-134 行
和
https://github.com/benanne/kaggle-galaxies/blob/master/load_data.py
第 572 行
Python documentation在这种情况下很清楚。
重要的部分是Safe importing of main module
。
您的 try_convnet_cc_multirotflip_3x69r45_maxout2048_extradense.py
脚本在模块级别做了很多事情。无需详细阅读,我已经可以说你应该用一个函数包装工作流并像这样使用它:
if __name__ == '__main__':
freeze_support() # Optional under circumstances described in docs
your_workflow_function()
除了您遇到的问题之外,如果用户只是想导入它并重用它的某些功能,那么不要让可能使用您的脚本的用户感到惊讶是一个好习惯。
所以不要将您的代码放在模块级别。在模块级别有常量是可以的,但工作流应该在函数中并且 类.
如果 Python 模块打算用作脚本(就像您的情况一样),您只需将 if __name__ == '__main__'
放在该模块的最后,仅当模块是时才调用 your_workflow_function()
解释器的入口点 - 所谓的 main module
.
我将转储我在尝试 python 脚本时得到的错误代码:
预先预处理验证数据
使用GPU设备0:Tesla K20c
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "C:\SciSoft\WinPython-64bit-2.7.6.4\python-2.7.6.amd64\lib\multiprocessing\forking.py", line 380, in main
prepare(preparation_data)
File "C:\SciSoft\WinPython-64bit-2.7.6.4\python-2.7.6.amd64\lib\multiprocessing\forking.py", line 495, in prepare
'__parents_main__', file, path_name, etc
File "C:\Users\Administrator\Desktop\Galaxy Data\kaggle-galaxies-master\kaggle-galaxies-master\try_convnet_cc_multirotflip_3x69r45_maxout2048_extradense.py", line 133, in <module>
for data, length in create_valid_gen():
File "load_data.py", line 572, in buffered_gen_mp
process.start()
`文件 "C:\SciSoft\WinPython-64bit-2.7.6.4\python-2.7.6.amd64\lib\multiprocessing\process.py",第 130 行,开始 self._popen = Popen(self)
文件 "C:\SciSoft\WinPython-64bit-2.7.6.4\python-2.7.6.amd64\lib\multiprocessing\forking.py",第 258 行,在 init 中 cmd = get_command_line() + [rhandle]
文件 "C:\SciSoft\WinPython-64bit-2.7.6.4\python-2.7.6.amd64\lib\multiprocessing\forking.py",第 358 行,在 get_command_line`
中is not going to be frozen to produce a Windows executable.''')
运行时错误: 尝试在当前进程之前启动一个新进程 已完成引导阶段。
This probably means that you are on Windows and you have
forgotten to use the proper idiom in the main module:
if __name__ == '__main__':
freeze_support()
...
The "freeze_support()" line can be omitted if the program
is not going to be frozen to produce a Windows executable.
据我所知,我必须插入一行
if __name__ == '__main__':
一些让它工作的地方
谁能告诉我应该将它插入到哪个文件中?我已将受影响的文件列表包含在初始错误日志中
受影响的文件:
第 131-134 行
和
https://github.com/benanne/kaggle-galaxies/blob/master/load_data.py
第 572 行
Python documentation在这种情况下很清楚。
重要的部分是Safe importing of main module
。
您的 try_convnet_cc_multirotflip_3x69r45_maxout2048_extradense.py
脚本在模块级别做了很多事情。无需详细阅读,我已经可以说你应该用一个函数包装工作流并像这样使用它:
if __name__ == '__main__':
freeze_support() # Optional under circumstances described in docs
your_workflow_function()
除了您遇到的问题之外,如果用户只是想导入它并重用它的某些功能,那么不要让可能使用您的脚本的用户感到惊讶是一个好习惯。
所以不要将您的代码放在模块级别。在模块级别有常量是可以的,但工作流应该在函数中并且 类.
如果 Python 模块打算用作脚本(就像您的情况一样),您只需将 if __name__ == '__main__'
放在该模块的最后,仅当模块是时才调用 your_workflow_function()
解释器的入口点 - 所谓的 main module
.