Существуют ли встроенные функции, блокирующие операции ввода-вывода, которые не позволяют запускать другие потоки?

Я встретил это интересное выражение в разделе "Предостережения" документации для thread сегодня:

Не все встроенные функции, которые могут блокировать ожидание ввода-вывода, позволяют потоки для запуска. (Самые популярные (time.sleep(), file.read(), select.select()) работают как ожидалось.)

Практически везде, где я когда-либо видел обсуждаемые темы Python, всегда было допущено, что все встроенные функции, которые делают I/O, будут выпускать GIL, что означает, что другие потоки могут запускаться во время функциональных блоков. Насколько я знаю, единственным риском операции ввода-вывода, блокирующей другие потоки, было бы, если бы это было сделано с ошибкой C-расширения, которое пренебрегало выпуском GIL.

Итак, действительно ли это утверждение из thread docs истинно? Существуют ли встроенные блокирующие операции ввода-вывода, которые не освобождают GIL? До сих пор я не смог найти конкретных примеров.

Ответ 1

Вот официальное слово от Гвидо ван Россума об этом:

Не в моих самых смелых мечтах я мог ожидать, что это требование все еще быть в документах 20 лет спустя. :-) Пожалуйста, избавьтесь от этого.

Так что ответ на мой вопрос - "Нет".