Python 3.5+osфункция
os.set_blocking
os — режим дескриптора
Переключает дескриптор между блокирующим и неблокирующим режимом. На Windows — с Python 3.12 и только для каналов.
Синтаксис
os.set_blocking(...)
После перевода в неблокирующий режим os.read и os.write не ждут, а поднимают BlockingIOError; код должен быть готов к этому и к частичным записям. Флаг принадлежит открытому файлу, а не номеру: копии через dup и унаследованные дочерним процессом меняются вместе. На Windows с 3.12 работает только для каналов.
Примеры
import os
r, w = os.pipe()
os.set_blocking(r, False) # → только Unix: канал переведён в неблокирующий режим, возвращает None
print(os.get_blocking(r)) # → только Unix: False — режим действительно сменился
print(os.read(r, 10)) # → только Unix: BlockingIOError — данных нет, но чтение не ждёт, а сразу падает
os.set_blocking(r, True) # → только Unix: вернули блокирующий режим, теперь os.read(r, 10) будет ждать данные
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности