我要在尝试python脚本时转储我得到的错误代码:
预先处理验证数据
使用gpu device 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()
`文件&#34; C:\ SciSoft \ WinPython-64bit-2.7.6.4 \ python-2.7.6.amd64 \ lib \ multiprocessing \ process.py&#34;,第130行,开始 self._popen = Popen(self)
文件&#34; C:\ SciSoft \ WinPython-64bit-2.7.6.4 \ python-2.7.6.amd64 \ lib \ multiprocessing \ forking.py&#34;,第258行, init cmd = get_command_line()+ [rhandle]
文件&#34; C:\ SciSoft \ WinPython-64bit-2.7.6.4 \ python-2.7.6.amd64 \ lib \ multiprocessing \ forking.py&#34;,第358行,在get_command_line`中
is not going to be frozen to produce a Windows executable.''')
RuntimeError: 尝试在当前进程之前启动新进程 已经完成了自举阶段。
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行
答案 0 :(得分:0)
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
。