그래서, 나는 C에서 파이썬 콜백 함수를 호출하고 싶다.C에서 파이썬 함수를 호출하려고 할 때 Segfault
어떤 시점에서, 함수는 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);
마지막 호출이 세그먼트 화 오류를 발생시킵니다. 당신은 어떤 생각을 가지고 있습니까, 왜 그렇게 할 것입니까?
디버그 모드로 컴파일하고, GDB에서로드하고 백 트레이스를 얻습니다. –
파이썬을 다시 호출하기 전에 GIL을 잡고 있는지 확인 하시겠습니까? – ncoghlan
나는 더 많은 가능성이있는 다른 문제를 발견했다 (내 대답 참조). 그래도 작동하지 않으면 http://docs.python.org/dev/c-api/init.html#thread-state-and-the-global-interpreterlock에서 볼 수있는 Google 사료를 충분히 제공해야합니다. CPython 인터프리터 잠금을 처리하는 방법에 대한 설명을 따라하기 쉽습니다. – ncoghlan