Я встретил это интересное выражение в разделе "Предостережения" документации для thread
сегодня:
Не все встроенные функции, которые могут блокировать ожидание ввода-вывода, позволяют потоки для запуска. (Самые популярные (
time.sleep()
,file.read()
,select.select()
) работают как ожидалось.)
Практически везде, где я когда-либо видел обсуждаемые темы Python, всегда было допущено, что все встроенные функции, которые делают I/O, будут выпускать GIL, что означает, что другие потоки могут запускаться во время функциональных блоков. Насколько я знаю, единственным риском операции ввода-вывода, блокирующей другие потоки, было бы, если бы это было сделано с ошибкой C-расширения, которое пренебрегало выпуском GIL.
Итак, действительно ли это утверждение из thread
docs истинно? Существуют ли встроенные блокирующие операции ввода-вывода, которые не освобождают GIL? До сих пор я не смог найти конкретных примеров.