所以,我想从 C 调用一个 Python 回调函数。
在某个时候,函数被发送到 C 并像这样打包成一个元组
PyObject *userData = Py_BuildValue("Oi",py_callback,some_number);
在那个区域的某个地方,我也做 Py_INCREF(py_callback)
。
在程序的稍后时间,我想调用该函数
PyObject *py_callback;
int some_number;
PyArg_ParseTuple((PyObject*)userData,"Oi",&py_callback,&some_number); // returns true
PyObject *py_result = PyObject_CallFunctionObjArgs(py_callback,
/* ... */
NULL);
最后一次调用抛出一个段错误。你知道为什么它会做这样的事情吗?
最佳答案
当从 Python C API 获得奇怪的行为时,始终值得仔细检查您是否正确管理全局解释器锁(又名“GIL”)的状态:http://docs.python.org/c-api/init.html#thread-state-and-the-global-interpreter-lock
关于python - 尝试从 C 调用 Python 函数时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5090585/