Как я могу проверить, содержит ли поток в настоящее время GIL?

Я попытался найти функцию, которая сообщает мне, имеет ли текущий поток глобальную блокировку интерпретатора или нет.

Документация Python/C -API, похоже, не содержит такой функции.

Мое текущее решение состоит в том, чтобы просто получить блокировку, используя PyGILState_Ensure(), прежде чем освободить ее, используя PyEval_SaveThread, чтобы не пытаться снять блокировку, которая не была получена текущим потоком.

(кстати. что значит "выдает фатальную ошибку"?)

Предыстория этого вопроса :У меня есть многопоточное приложение, в которое встроен Python. Если поток закрывается без снятия блокировки (, что может произойти из-за сбоев ), другие потоки больше не могут работать. Таким образом, при очистке/закрытии потока я хотел бы проверить, удерживается ли блокировка этим потоком, и освободить его в этом случае.

Заранее спасибо за ответы!

11
задан Perception 26 February 2013 в 18:30
поделиться