Я попытался найти функцию, которая сообщает мне, имеет ли текущий поток глобальный интерпретатор или нет.
Документация Python/C-API, похоже, не содержит такой функции.
Мое текущее решение состоит в том, чтобы просто получить блокировку с помощью PyGILState_Ensure()
, прежде чем отпускать ее, используя PyEval_SaveThread
, чтобы не пытаться освободить блокировку, которая не была получена текущим потоком.
(Кстати, что означает "выдает фатальную ошибку"?)
Предыстория вопроса: У меня многопоточное приложение, в которое встроен Python. Если поток закрыт, не отпуская блокировку (что может произойти из-за сбоев), другие потоки больше не могут запускаться. Таким образом, при очистке/закрытии нитки, я хотел бы проверить, удерживается ли замок этой нитью и освобождает ее в этом случае.
Заранее благодарим за ответы!