다중 스레드 C++ 응용 프로그램에 Python을 포함시키고 있는데 다중 스레드에서 Py_Initialize()
을 호출해도 안전합니까? 아니면 메인 스레드에서 호출해야합니까?다중 스레드에서 Py_Initialize() 호출
답변
는 Py_Initialize()
코드가 포함되어
if (initialized)
return;
initialized = 1;
기능에 대한 문서는 말한다 :
이
는 초라고하는 어떤 조합입니다 time (Py_Finalize()를 먼저 호출하지 않고).
내가하는 일에 따라 복잡해 질 수는 있지만 메인 스터디에서만 수행하는 것이 좋습니다.
신호 처리기는 주요 파이썬 스레드의 컨텍스트에서만 트리거된다는 점이 문제입니다. 즉, 어떤 스레드 가든 Py_Initialize()
에 전화를 걸었습니다. 따라서 일시적인 스레드이고 한 번만 사용한 다음 폐기하면 신호 처리기를 호출 할 기회가 없습니다. 따라서 신호를 다루는 방법에 대해 생각해 봐야합니다.
네이티브 스레드 API를 사용하여 C 코드로 작성된 일시적인 쓰레드를 많이 사용하고 파이썬 인터프리터를 호출 할 때마다 파이썬 인터프리터에서 데이터를 생성 할 때 조심해야한다. 이러한 외부 스레드를 계속 만들고 삭제하면 누적됩니다. 외부 스레드에서 호출 할 경우 스레드 풀을 사용하고 이전 스레드를 계속 재사용하도록 노력해야합니다.
'Py_Initialize()'가 여러개의 쓰레드에서 호출된다면 다른 쓰레드가'1 '에 쓰는 동안 한 쓰래드가이 변수를 읽었을 때 어떻게 안전합니까? – Allanqunzi
예, 아마도 다른 문제 일 것입니다. 이 경우에는''Py_Initialize()''를 호출 할 때 뮤텍스 잠금을 사용해야 할 것이다. –
가능한 복제본 [정적 변수를 수정할 때 스레드가 안전합니까?] (http://stackoverflow.com/questions/43837721/is-it-thread-safe-to-modify-static-variable) –
이미이 질문을했습니다. 다른 초점이 있긴하지만. 사본에 대한 내 대답을 참조하십시오. –