블로킹 작업 (선택)을 수행하고 수신 메시지를 처리하는 C 함수를 래핑하고 있습니다.G 코드를 차단하고 파이썬으로 콜백 할 수있는 C 함수보다 먼저 GIL을 릴리즈 할 수 있습니까?
Py_BEGIN_ALLOW_THREADS
blocking_function();
Py_END_ALLOW_THREADS
그러나,이 함수는 매개 변수로 콜백 포인터를 소요 발생합니다 나의 이해는 C 함수 차단하려고 할 때 실행하는 다른 스레드를 허용하면서, 올바른 방법은 그것을 호출하는 것입니다. 이 콜백은 C 함수에 의해 사전 처리 된 들어오는 메시지를 처리 할 때 호출됩니다. 성공적으로 파이썬 콜백을 전달할 수 있도록 PyEval_CallObject()
을 호출하는 함수에서이 콜백을 래핑했습니다. 그것은 동시에 할 수 있다면 지금은 스레딩 지원을 추가 해요 것을
이 궁금 해요 :
- 이 차단 작업을 호출하기 전에 GIL을 놓습니다.
- 이 차단 작업을 안전하게 파이썬 인터프리터로 다시 호출하십시오.
문제가 발생합니까? 그렇다면 주위에 방법이 있습니까?
감사합니다.
"PyEval_CallObject"를 호출하는 내 처리기에서 GIL을 다시 캡처하는 것이 올바른 접근 방법 인 것 같습니다. 그러나 이것은 저장된'PyThreadState'를 전달하는 것을 의미합니다. 이것은 약간 까다로워 보입니다! – Steve