멀티 쓰레드와 함께 boost.python C/C++ 프로그램을 개발합니다.()Boost python/thread에서 모듈을 가져 오려면 ReleaseLock()이 필요합니다. 왜?
PyEval_InitThreads;
main()
에서, I는 스레드를 생성
pthread_create (& id, & detached_attr, newThread, NULL);
· newThread()에서 두 개의 Py_ * 함수를 호출합니다.
Py_Initialize();
PyGILState_STATE gstate = PyGILState_Ensure();
은 그 때 나는 newThread()
에 hoge()
라는 이름의 C++ 함수를 호출 :
void hoge(){
py::object main_module;
py::object main_namespace;
try {
main_module = py::import("__main__"); //segmentation fault
main_namespace = main_module.attr("__dict__");
} catch (py::error_already_set const &) {
PyErr_Print();
}
//Some boost python code
}
gdb를 다시 추적 출력이 여기에있다.
(gdb) bt
#0 0x4032fe24 in __ctype_b_loc() from /lib/libc.so.6
#1 0x4032fde8 in __ctype_b_loc() from /lib/libc.so.6
import()
이 실패하는 이유는 무엇입니까? 나는 모른다. 이 문제를 해결하는 방법을 알려주십시오. --edit 12/12/28
은 ---
main()
에서
, 나는
Py_Initialize();
PyEval_InitThreads();
PyEval_ReleaseLock();
가 그럼 난 새로운 스레드를 만들 실행합니다. 새로운 스레드, 나는
PyGILState_STATE gstate = PyGILState_Ensure();
CALL SOME PYTHON CODE
PyGILState_Release(gstate);
을 실행하지만 지금 왜 작동 나는
을 모른다. 누군가 이유를 말해 줄 수 있니?
더 간단한 예를 먼저 시도하는 것이 좋습니다. 예를 들어 코드없이 스레드없이 실행되도록하십시오. 모든 것이 예상대로 작동하면 (테스트 해보십시오!) 멀티 스레딩을 시도하십시오. –
조언 해 주셔서 감사합니다. 이 문제를 해결할 수 있습니다. – fantajista
어떻게 문제를 해결 했습니까? 나는 같은 문제를 겪고있다 .. –