2011-03-20 6 views
3

저는 C++ 어플리케이션에 파이썬 3.2를 임베드하고 있는데, 프로그램에서 여러 번 실행되는 서브 인터프리터가 있습니다 (Py_NewInterpreter으로 생성). 그들은 여러 번 GIL을 획득하고 공개하지만 하위 해석기 중 하나를 파괴하려고 할 때 문제가 발생했습니다.서브 인터프리터를 파손 한 후 GIL 해제하기

서브 인터프리터를 파괴하려면 GIL을 획득해야합니다. 그래서 이렇게 :

PyEval_AcquireLock(threadstate); 

은 그 때 나는

Py_EndInterpreter(threadstate); 

와 인터프리터를 파괴 그리고 당신은 그것이 GIL을 해제 할 생각 때문에이 파괴되었다 개최 된 것. 그러나 Py_EndInterpreter에 대한 설명서는 말한다 :

주어진 스레드 상태가 현재 스레드 상태 여야합니다. 아래 스레드 상태에 대한 토론을 참조하십시오. 호출이 반환되면 현재 스레드 상태가 NULL입니다. (글로벌 통역 잠금이이 함수를 호출하기 전에 개최해야하며 여전히 반환 할 때 개최됩니다.)

것은 그래서 나는 서브 통역 및 서브 인터프리터를 파괴를 파괴 할 때 GIL을 유지해야하는 경우 NULL로 설정 서브 - 인터프리터를 파기 한 후에 어떻게 GIL을 릴리즈 할 수 있습니까?

답변

2

Py_EndInterpreter()에 전화 한 직후 PyEval_ReleaseLock()으로 전화하면 어떻게됩니까? 그것은 문서가 어쨌든해야한다고 말한 것입니다. :)