如何在.bat文件中使用"if __name__ == '__main__':"?



我有一个在Spyder中运行良好的多处理函数,如下所示:

if __name__ == '__main__':
global results
p = Pool(20)
results = p.map(get_api_item, date_list)
p.terminate()
p.join()
result = pd.concat(results)
path = r'<path>'
result.to_csv(os.path.join(path,r'api_item.csv'), index=False)

当我在.bat文件中运行该.py文件时...

@echo off
"E:PythonAnaconda3python.exe" "E:Projectsapi.py" %*
pause

。我收到此错误:

Traceback (most recent call last):
File "<string>", line 1, in <module>
File "E:PythonAnaconda3libmultiprocessingspawn.py", line 105, in spawn_ma
in
exitcode = _main(fd)
File "E:PythonAnaconda3libmultiprocessingspawn.py", line 114, in _main
prepare(preparation_data)
File "E:PythonAnaconda3libmultiprocessingspawn.py", line 225, in prepare
_fixup_main_from_path(data['init_main_from_path'])
File "E:PythonAnaconda3libmultiprocessingspawn.py", line 277, in _fixup_m
ain_from_path
run_name="__mp_main__")
File "E:PythonAnaconda3librunpy.py", line 263, in run_path
pkg_name=pkg_name, script_name=fname)
File "E:PythonAnaconda3librunpy.py", line 96, in _run_module_code
mod_name, mod_spec, pkg_name, script_name)
File "E:PythonAnaconda3librunpy.py", line 85, in _run_code
exec(code, run_globals)
File "<path to api>api.py", line 29, in <module>
result = pd.concat(results)
NameError: name 'results' is not defined

我认为这是因为服务(.bat文件(可能不会将其称为__main__。我该如何补救?

请阅读并理解多处理文档 (https://docs.python.org/3.8/library/multiprocessing.html( 中的警告,从以下位置开始:

安全导入主模块

确保主模块可以由新的 Python 解释器安全地导入,而不会引起意外的副作用(例如 开始一个新过程(。

您的模块将由其他进程导入,因此您不能根据__main__块中的代码在全局(最外层(级别使用代码。

相关内容

  • 没有找到相关文章

最新更新