Python Glossary English

Python 3.3+Linuxosфункция

os.pipe2

os — спец. дескрипторы

Как pipe, но сразу задаёт флаги (напр. O_NONBLOCK/O_CLOEXEC) для обоих концов. Доступно на Linux.

Синтаксис

os.pipe2(...)

Задаёт флаги атомарно при создании, без отдельных вызовов для каждого конца: os.pipe2(os.O_NONBLOCK | os.O_CLOEXEC). Атомарность важна в многопоточной программе, где между созданием канала и установкой флагов другой поток мог бы успеть запустить дочерний процесс.

Примеры

import os
r, w = os.pipe2(os.O_NONBLOCK | os.O_CLOEXEC)   # → ? только Linux: пара дескрипторов, сразу неблокирующих и закрываемых при exec
print(os.write(w, b'ping'))   # → 4
print(os.read(r, 4))   # → b'ping'
os.read(r, 4)   # → BlockingIOError — данных больше нет, но из-за O_NONBLOCK вызов не зависает
r2, w2 = os.pipe()   # переносимый вариант без флагов: O_NONBLOCK/O_CLOEXEC пришлось бы доставлять отдельными вызовами fcntl, оставляя окно гонки при fork

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности