Как определить, содержит ли функция GIL?

Есть ли надежный способ проверить, удерживает ли функция (не выпускает) GIL на протяжении всего ее выполнения? Если да, то что это за метод?

Например, я хочу определить, содержат ли GIL алгоритмы получения ключей из hashlib? Я подумал, что могу использовать time.time(), чтобы определить, удерживается ли GIL, проверяя, была ли разница между временем после запуска потока и временем до этого значительно большой. Но этот вариант зависит от личного суждения и не учитывает, были ли оба раза собраны до того, как интерпретатор решил выполнить рассматриваемую функцию.


person Tankobot    schedule 27.12.2016    source источник
comment
Это было бы невозможно изнутри Python. Любая функция, извлекающая эту информацию, должна будет в этот момент удерживать GIL.   -  person Klaus D.    schedule 27.12.2016
comment
Насколько я понимаю, это актуально только в том случае, если вы выполняете потоки Python. Каждый поток Python запускается как собственный поток ОС в системе. Но внутри интерпретатора Python работающий поток (только один) содержит GIL. Практически указатель current_thread указывает на поток. GIL высвобождается в основном, когда работающий поток вызывает функцию ввода-вывода (чтение/запись файлов, сокетов и т. д.), затем GIL переходит к следующему потоку, который может начать выполняться сейчас... и так далее. Проверьте этот (ИМХО) очень хороший обзор от Дэвида Бизли: youtube.com/watch?v=ph374fJqFPE< /а>   -  person klaas    schedule 27.12.2016
comment
Это была одна из причин, по которой я хотел определить статус выпуска GIL для функции, чтобы определить, будет ли используемая текущая реализация выпускать GIL или удерживать его.   -  person Tankobot    schedule 27.01.2017
comment
Дублирует stackoverflow.com/questions/11366556/?   -  person lumbric    schedule 07.11.2017
comment
@lumbric почти, но этот вопрос спрашивает, как определить, освобождает ли функция когда-либо GIL, в отличие от связанного вопроса, который больше связан с опросом, заблокирован ли в настоящее время мертвый поток GIL.   -  person Tankobot    schedule 07.11.2017