<p>这个问题听起来很熟悉,我甚至可以用你的代码重现它:</p>
<p>如果多次调用myFunction(),则会发生多次导入模块的情况。根据文件,这可能会导致以下问题:</p>
<blockquote>
<p>"Some extensions may not work properly if their initialization routine
is called more than once; this can happen if an application calls
Py_Initialize() and Py_Finalize() more than once."
<a href="https://docs.python.org/2/c-api/init.html" rel="nofollow noreferrer">https://docs.python.org/2/c-api/init.html</a></p>
</blockquote>
<p>因此,如果应用程序中存在这种情况,解决方法是只初始化Python解释器一次:</p>
<pre><code>#include <iostream>
#include <Python/Python.h>
void myFuncion()
{
PyObject* fExportar = nullptr;
PyObject* modulo = nullptr;
PyObject* pName = nullptr;
const char *scriptDirectoryName = "path/of/my/pyfile";
PyObject *sysPath = PySys_GetObject("path");
PyObject *path = PyUnicode_FromString(scriptDirectoryName);
int result = PyList_Insert(sysPath, 0, path);
if (result == 0 )//0 if ok, -1 if error
{
pName = PyUnicode_FromString("exportarXLS");//exportarXLS.py
modulo = PyImport_Import(pName);
Py_DECREF(path);
if (modulo)
{
fExportar = PyObject_GetAttrString(modulo, "exportar");//it crahs here
Py_DECREF(modulo);
if (fExportar)
{
//call the function
}
}
}
else
{
PyErr_Print();
}
}
int main(int argc, const char * argv[]) {
Py_Initialize();
myFuncion();
myFuncion();
// what ever
Py_Finalize();
return 0;
}
</code></pre>
<p>编辑:“我甚至可以复制它”意味着我可以让它崩溃,在另一行,虽然,通过导入numpy。你知道吗</p>