尝试从C调用Python函数时的Segfault

bas*_*ibe 1 c python function callback call

所以,我想从C调用一个Python回调函数.

在某些时候,函数被发送到C并打包成这样的元组

PyObject *userData = Py_BuildValue("Oi",py_callback,some_number);
Run Code Online (Sandbox Code Playgroud)

在那个地区的某个地方,我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);
Run Code Online (Sandbox Code Playgroud)

并且最后一次调用会引发分段错误.你有什么想法,为什么会做这样的事情?

nco*_*lan 5

当从Python C API获得奇怪的行为时,总是值得仔细检查您是否正确管理全局解释器锁(也称为"GIL")的状态:http://docs.python.org/c-api/ init.html#线程状态和最全球翻译锁