循环调用python文件,第二次调用PyImport_ImportModule函数加载python文件,软件获取不到文件指针报错,如下图所示: 
如果python文件调用流程是封装为一个功能函数,软件在执行后这个功能函数,调用了Py_Initalize()后,软件没有关闭的话,是不需要调用Py_Finalize()函数去释放资源的;
如果你按照流程先初始化调用Py_Initalize()后,PyImport_ImportModule()加载python文件去执行,然后调用Py_Finalize()释放资源,此时软件进程并没有结束,而你又重复上述调用流程,重新初始化再调用PyImport_ImportModule函数去加载python文件的话,就会报错;
所以,Py_Finalize()函数一定是你软件进程结束前才去释放,正常使用,在软件没有关闭前,Py_Initalize()->PyImport_ImportModule()去调用就可以了;
在循环调用Python文件时,如果在Py_Initalize后调用PyImport_ImportModule,接着使用Py_Finalize释放资源,然后再次尝试相同流程,会导致错误。正确做法是在软件进程结束前不使用Py_Finalize,或者确保不重复初始化和加载已导入的模块。
4151

被折叠的 条评论
为什么被折叠?



