select
— Ожидание завершения I/O¶
Модуль обеспечивает доступ к функциям select()
и poll()
, доступным
в большинстве операционных систем, devpoll()
доступным в Solaris и
производных, epoll()
доступным в Linux 2.5 + и kqueue()
доступным в
большинстве BSD. Обратите внимание, что в Windows работают только для
сокеты; на других операционных системах также работает для других типов
файлов (в частности, в Unix работает над пайпы). Это не может быть
используемый на обычных файлах, чтобы определить, вырос ли файл, так как это было
в последний раз прочитано.
Примечание
Модуль selectors
обеспечивает высокоуровневое и эффективное
мультиплексирование I/O, основанное на примитивах модуля select
.
Вместо этого пользователям рекомендуется использовать модуль selectors
, если
они не хотят точного контроля над примитивами уровня ОС используемый.
Модуль определяет следующее:
-
select.
devpoll
()¶ (Поддерживается только в Solaris и производных.) возвращает объект опроса
/dev/poll
; методы, поддерживаемые объектами devpoll, см. в разделе /dev/poll объекты Polling ниже.Объекты
devpoll()
связаны с количеством файла дескрипторы, позволенного во время экземпляра. Если программа сократит этот значение,devpoll()
завершится неудачей. Если ваша программа увеличивает этот значение,devpoll()
может возвращает неполный список активного файла дескрипторы.Новый файл дескриптор является не наследуемым.
Добавлено в версии 3.3.
Изменено в версии 3.4: Новый файловый дескриптор теперь не наследуется.
-
select.
epoll
(sizehint=-1, flags=0)¶ (Поддерживается только в Linux 2.5.44 и более новой версии.) возвращает объект опроса края, который может быть используемый как интерфейсом Edge или Level Triggered для событий I/O.
sizehint информирует epoll об ожидаемом количестве регистрируемых событий. Для использования значения по умолчанию он должен быть положительным или «-1». Это - только используемый на более старых системах, где
epoll_create1()
не доступен; в противном случае он не имеет эффекта (хотя его значение все еще проверяется).flags устарел и полностью игнорируется. Однако при поставке его значение должен быть
0
илиselect.EPOLL_CLOEXEC
, в противном случаеOSError
поднимается.Методы, поддерживаемые объектами эполлинга, см. в разделе Объекты опроса триггера кромки и уровня (epoll) ниже.
Объекты
epoll
поддерживают протокол управления контекст: при используемый вwith
инструкция новый файл дескриптор автоматически закрывается в конце блока.Новый файл дескриптор является не наследуемым.
Изменено в версии 3.3: Добавлен параметр flags.
Изменено в версии 3.4: Добавлена поддержка
with
инструкция. Новый файл дескриптор теперь не наследуется.Не рекомендуется, начиная с версии 3.4: Параметр flags.
select.EPOLL_CLOEXEC
- используемый по умолчанию теперь. Используйте командуos.set_inheritable()
, чтобы сделать файл дескриптор наследуемым.
-
select.
poll
()¶ (Не поддерживается всеми операционными системами.) возвращает объект опроса, который поддерживает регистрацию и отмену регистрации файла дескрипторы, а затем опрос их для I/O событий; методы, поддерживаемые объектами опроса, см. в разделе Объекты Kqueue ниже.
-
select.
kqueue
()¶ (Поддерживается только в BSD.) возвращает объект очереди ядра; методы, поддерживаемые объектами kqueue, см. в разделе Объекты Kqueue ниже.
Новый файл дескриптор является не наследуемым.
Изменено в версии 3.4: Новый файл дескриптор теперь не наследуется.
-
select.
kevent
(ident, filter=KQ_FILTER_READ, flags=KQ_EV_ADD, fflags=0, data=0, udata=0)¶ (Поддерживается только в BSD.) возвращает объект события ядра; методы, поддерживаемые kevent-объектами, см. в разделе Объекты Kevent ниже.
-
select.
select
(rlist, wlist, xlist[, timeout])¶ Это простой интерфейс для системного вызова Unix
select()
. Первые три аргумента являются итерациями «ожидаемых объектов»: либо целых чисел, представляющих файловые дескрипторы, либо объектов с методом без параметров с именемfileno()
, возвращающим такое целое число :- rlist: дождаться готовности к чтению
- wlist: дождаться готовности к написанию
- xlist: дождаться «исключительного состояния» (см. страницу руководства о том, что ваша система считает таким условием)
Пустые итерации разрешены, но принятие трех пустых итераций зависит от платформы. (Известно, что это работает в Unix, но не в Windows.) Необязательный аргумент timeout указывает время ожидания в виде числа с плавающей запятой в секундах. Когда аргумент timeout опущен, функциональные блоки блокируются до тех пор, пока не будет готов хотя бы один дескриптор файла. Нулевое значение тайм-аута указывает на опрос и никогда не блокируется.
Возвращает значение - тройка списков объектов, которые готовы: подмножества первых трёх аргументов. Когда перерыв достигнут без файла дескриптор, становящегося готовым, три пустых списка - возвращенный.
Среди допустимых типов объектов в итерациях - Python файловые объекты (например,
sys.stdin
или объекты, возвращаемыеopen()
илиos.popen()
), объекты сокетов, возвращаемыеsocket.socket()
. Вы также можете определить класс wrapper самостоятельно, если у него есть соответствующий методfileno()
(который действительно возвращает дескриптор файла, а не просто случайное целое число).Примечание
Объекты файла на Windows не приемлемы, но сокеты. На Windows основная функция
select()
обеспечена библиотекой WinSock и не обращается с файлом дескрипторы, которые не происходят из WinSock.Изменено в версии 3.5: Функция теперь повторена с повторно вычисленным перерывом, когда она прервана сигналом, кроме того, если сигнал обработчик поднимает исключение (см. PEP 475 для объяснения), вместо того, чтобы поднять
InterruptedError
.
-
select.
PIPE_BUF
¶ Минимальное количество байтов, которое может быть записано без блокировки в пайп, когда сообщение о готовности пайп к записи в
select()
,poll()
или другом интерфейсе в этом модуле. Это не относится к другим файловым объектам, таким как сокеты.Этот значение, как гарантирует POSIX, будет по крайней мере 512.
Availability: Unix
Добавлено в версии 3.2.
/dev/poll
объекты Polling¶
Solaris и производные имеют /dev/poll
. В то время как select()
- O (самый
высокий файл дескриптор), а poll()
- O (номер файла дескрипторы),
/dev/poll
- O (активный файл дескрипторы).
Поведение /dev/poll
очень близко к стандартному объекту poll()
.
-
devpoll.
close
()¶ Закрыть файл дескриптор объекта опроса.
Добавлено в версии 3.4.
-
devpoll.
closed
¶ True
, если объект опроса закрыт.Добавлено в версии 3.4.
-
devpoll.
fileno
()¶ Возвращает количество файла дескриптор голосующего объекта.
Добавлено в версии 3.4.
-
devpoll.
register
(fd[, eventmask])¶ Зарегистрировать файл дескриптор с объектом опроса. При последующих вызовах метода
poll()
будет проверяться наличие в файле дескриптор каких-либо ожидающих событий I/O. fd может быть целым числом или объектом с методомfileno()
, который возвращает целое число. Объекты файла осуществляютfileno()
, таким образом, они могут также быть используемый как аргументом.eventmask - это необязательная битовая маска, описывающая тип событий, которые требуется проверить. Константы совпадают с константами для объекта
poll()
. Дефолт значение является комбинацией константPOLLIN
,POLLPRI
иPOLLOUT
.Предупреждение
Регистрация файла дескриптор, это уже зарегистрировано, не является ошибкой, но результат не определен. Необходимо сначала отменить регистрацию или изменить его. Это важное отличие по сравнению с
poll()
.
-
devpoll.
modify
(fd[, eventmask])¶ Этот метод выполняет
unregister()
, за которым следуетregister()
. Это (немного) более эффективно, что делать то же самое явно.
-
devpoll.
unregister
(fd)¶ Удаление файла дескриптор, отслеживаемого объектом опроса. Так же, как и метод
register()
, fd может быть целым числом или объектом с методомfileno()
, который возвращает целым числом.Попытка удалить файл дескриптор, который никогда не был зарегистрирован, безопасно игнорируется.
-
devpoll.
poll
([timeout])¶ Получает голоса набора зарегистрированного файла дескрипторы и возвращает возможно пустой список, содержащий 2 кортежа
(fd, event)
для дескрипторы, у которых есть события или ошибки сообщить. fd - это файл дескриптор, а event - битовая маска с битами, установленными для сообщаемых событий для этого дескриптор —POLLIN
для ожидающего ввода,POLLOUT
для указания того, что дескриптор может быть записан, и так далее. Пустой список указывает, что у требования, рассчитанного и никакой файл дескрипторы, были любые события, чтобы сообщить. Если timeout дан, он определяет отрезок времени в миллисекундах, которые система будет ждать событий перед возвращением. Если timeout опущен, -1 илиNone
, вызов будет блокироваться до тех пор, пока не произойдет событие для этого объекта опроса.Изменено в версии 3.5: Функция теперь повторена с повторно вычисленным перерывом, когда она прервана сигналом, кроме того, если сигнал обработчик поднимает исключение (см. PEP 475 для объяснения), вместо того, чтобы поднять
InterruptedError
.
Объекты опроса триггера кромки и уровня (epoll)¶
https://linux.die.net/man/4/epoll
eventmask
Константа Значение EPOLLIN
Доступно для чтения EPOLLOUT
Доступно для чтения EPOLLPRI
Срочные данные для чтения EPOLLERR
Ошибка произошла на ассоциированном. fd EPOLLHUP
Повесить трубку на ассоциированном. fd EPOLLET
Установить поведение Edge Trigger, по умолчанию это поведение Level Trigger EPOLLONESHOT
Задать поведение с одним выстрелом. После извлечения одного события fd автоматически отключается EPOLLEXCLUSIVE
Пробуждение только одного объекта epoll, если у связанного fd есть событие. По умолчанию (если этот флаг не установлен) пробуждаются все объекты epoll, выполняющие опрос fd. EPOLLRDHUP
Потоковый сокет однорангового соединения закрывается или завершение записи на половине соединения. EPOLLRDNORM
Эквивалентно EPOLLIN
EPOLLRDBAND
Приоритетные данные, которые могут быть прочитаны. EPOLLWRNORM
Эквивалентно EPOLLOUT
EPOLLWRBAND
Приоритетные данные могут быть записаны. EPOLLMSG
Игнорируется. Добавлено в версии 3.6:
EPOLLEXCLUSIVE
был добавлен. Он поддерживается только ядром Linux 4.5 или более поздней версии.
-
epoll.
close
()¶ Закрыть управляющий файл дескриптор объекта epoll.
-
epoll.
closed
¶ True
, если объект epoll закрыт.
-
epoll.
fileno
()¶ Возвращает количество файла дескриптор контроля fd.
-
epoll.
fromfd
(fd)¶ Создание объекта epoll из заданного файла дескриптор.
-
epoll.
register
(fd[, eventmask])¶ Зарегистрировать fd дескриптор с объектом epoll.
-
epoll.
modify
(fd, eventmask)¶ Изменение зарегистрированного файла дескриптор.
-
epoll.
unregister
(fd)¶ Удалите зарегистрированный файл дескриптор из объекта epoll.
-
epoll.
poll
(timeout=None, maxevents=-1)¶ Дождитесь событий. тайм-аут в секундах (float)
Изменено в версии 3.5: Функция теперь повторена с повторно вычисленным перерывом, когда она прервана сигналом, кроме того, если сигнал обработчик поднимает исключение (см. PEP 475 для объяснения), вместо того, чтобы поднять
InterruptedError
.
Объекты Kqueue¶
Системный вызов poll()
, поддерживаемый в большинстве Unix-систем,
обеспечивает лучшую масштабируемость для сетевых серверов, которые обслуживают
множество клиентов одновременно. poll()
измеряет лучше, потому что
системный вызов только требует листинга файла дескрипторы интереса, в то время
как select()
строит битовый массив, включает биты для fds интереса, и затем
позже целый битовый массив должен быть линейно просмотрен снова. select()
- O
(самый высокий файл дескриптор), в то время как poll()
- O (номер файла
дескрипторы).
-
poll.
register
(fd[, eventmask])¶ Зарегистрировать файл дескриптор в голосующем объекте. Будущие требования к методу
poll()
тогда проверят, есть ли у файла дескриптор какое-либо ожидание события I/O. fd может быть или целым числом или объектом с методомfileno()
это возвращает целое число. Объекты файла осуществляютfileno()
, таким образом, они могут также быть используемый как аргументом.eventmask является необязательной битовой маской, описывающей тип событий, которые требуется проверить, и может быть комбинацией констант
POLLIN
,POLLPRI
иPOLLOUT
, описанных в таблице ниже. Если не определенный, значение используемый по умолчанию проверит на все 3 типа событий.Константа Значение POLLIN
Есть данные для чтения POLLPRI
Есть срочные данные для чтения POLLOUT
Готов к выводу: запись не блокируется POLLERR
Состояние какой-то ошибки POLLHUP
Повесить трубку POLLRDHUP
Потоковый сокет однорангового соединения закрывается или завершение записи на половине соединения. POLLNVAL
Недопустимый запрос: дескриптор не открыт Регистрация файла дескриптор, это уже зарегистрировано, не является ошибкой и имеет тот же эффект как регистрация дескриптор точно однажды.
-
poll.
modify
(fd, eventmask)¶ Изменяет уже зарегистрированный fd. Это имеет тот же эффект, что и
register(fd, eventmask)
. Попытка изменить файл дескриптор, который никогда не был зарегистрирован, вызывает исключениеOSError
с ошибкойENOENT
.
-
poll.
unregister
(fd)¶ Удаление файла дескриптор, отслеживаемого объектом опроса. Так же, как и метод
register()
, fd может быть целым числом или объектом с методомfileno()
, который возвращает целым числом.Попытка удалить файл дескриптор, который никогда не был зарегистрирован, вызывает исключение
KeyError
.
-
poll.
poll
([timeout])¶ Получает голоса набора зарегистрированного файла дескрипторы и возвращает возможно пустой список, содержащий 2 кортежа
(fd, event)
для дескрипторы, у которых есть события или ошибки сообщить. fd - это файл дескриптор, а event - битовая маска с битами, установленными для сообщаемых событий для этого дескриптор —POLLIN
для ожидающего ввода,POLLOUT
для указания того, что дескриптор может быть записан, и так далее. Пустой список указывает, что у требования, рассчитанного и никакой файл дескрипторы, были любые события, чтобы сообщить. Если timeout дан, он определяет отрезок времени в миллисекундах, которые система будет ждать событий перед возвращением. Если timeout опущен, отрицательный илиNone
, вызов будет блокироваться до тех пор, пока не произойдет событие для этого объекта опроса.Изменено в версии 3.5: Функция теперь повторена с повторно вычисленным перерывом, когда она прервана сигналом, кроме того, если сигнал обработчик поднимает исключение (см. PEP 475 для объяснения), вместо того, чтобы поднять
InterruptedError
.
Объекты Kqueue¶
-
kqueue.
close
()¶ Закрыть управляющий файл дескриптор объекта kqueue.
-
kqueue.
closed
¶ True
, если объект kqueue закрыт.
-
kqueue.
fileno
()¶ Возвращает количество файла дескриптор контроля fd.
-
kqueue.
fromfd
(fd)¶ Создание объекта kqueue из заданного файла дескриптор.
-
kqueue.
control
(changelist, max_events[, timeout]) → eventlist¶ Низкоуровневый интерфейс к кевенту
- changelist должен быть итерабельным для kevent объектов или
None
max_events должен быть равен 0 или положительным целому тайм-ауту в секундах (возможно плавание); значение по умолчанию равноNone
, чтобы ждать вечно
Изменено в версии 3.5: Функция теперь повторена с повторно вычисленным перерывом, когда она прервана сигналом, кроме того, если сигнал обработчик поднимает исключение (см. PEP 475 для объяснения), вместо того, чтобы поднять
InterruptedError
.- changelist должен быть итерабельным для kevent объектов или
Объекты Kevent¶
https://www.freebsd.org/cgi/man.cgi?query=kqueue&sektion=2
-
kevent.
ident
¶ Значение используемый для идентификации события. Интерпретация зависит от фильтра, но обычно это файл дескриптор. В идентификаторе конструктора может быть либо int, либо объект с методом
fileno()
. кевент сохраняет целое число внутри.
-
kevent.
filter
¶ Имя фильтра ядра.
Константа Значение KQ_FILTER_READ
Принимает дескриптор и возвращает при наличии доступных для чтения данных KQ_FILTER_WRITE
Принимает дескриптор и возвращает при наличии доступных для записи данных KQ_FILTER_AIO
AIO запросы KQ_FILTER_VNODE
Возвращает, когда происходит одно или несколько запрошенных событий, наблюдаемых в fflag KQ_FILTER_PROC
WСледите за событиями по id процесса KQ_FILTER_NETDEV
Следить за событиями на сетевом устройстве [не доступно на Mac OS X] KQ_FILTER_SIGNAL
Возвращает всякий раз, когда наблюдаемый сигнал доставляется процессу KQ_FILTER_TIMER
Устанавливает произвольный таймер
-
kevent.
flags
¶ Действие фильтра.
Константа Значение KQ_EV_ADD
Добавление или изменение события KQ_EV_DELETE
Удаляет событие из очереди KQ_EV_ENABLE
Permitscontrol() для возвращаемого события KQ_EV_DISABLE
Отключает событие KQ_EV_ONESHOT
Удаляет событие после первого вхождения KQ_EV_CLEAR
Сброс состояния после получения события KQ_EV_SYSFLAGS
внутреннее событие KQ_EV_FLAG1
внутреннее событие KQ_EV_EOF
Фильтровать конкретное условие EOF KQ_EV_ERROR
Смотреть возвращаемые значения
-
kevent.
fflags
¶ Фильтрация определенных флагов.
KQ_FILTER_READ
иKQ_FILTER_WRITE
флаги фильтра:Константа Значение KQ_NOTE_LOWAT
низкий водяной знак буфера сокета KQ_FILTER_VNODE
флаги фильтра:Константа Значение KQ_NOTE_DELETE
unlink() был вызван KQ_NOTE_WRITE
произошла запись KQ_NOTE_EXTEND
файл был расширен KQ_NOTE_ATTRIB
был изменен атрибут KQ_NOTE_LINK
счетчик каналов изменился KQ_NOTE_RENAME
файл был переименован KQ_NOTE_REVOKE
доступ к файлу был аннулирован KQ_FILTER_PROC
флаги фильтра:Константа Значение KQ_NOTE_EXIT
процесс завершен KQ_NOTE_FORK
процесс вызвал fork() KQ_NOTE_EXEC
процесс выполнил новый процесс KQ_NOTE_PCTRLMASK
внутренний флаг фильтра KQ_NOTE_PDATAMASK
внутренний флаг фильтра KQ_NOTE_TRACK
следовать за процессом через fork() KQ_NOTE_CHILD
возвращается на дочернем процессе для NOTE_TRACK KQ_NOTE_TRACKERR
не удается подключиться к дочернему объекту KQ_FILTER_NETDEV
флаги фильтра (недоступны в Mac OS X):Константа Значение KQ_NOTE_LINKUP
канал включен KQ_NOTE_LINKDOWN
канал отключен KQ_NOTE_LINKINV
недопустимая ссылка состояния
-
kevent.
data
¶ Фильтрация данных.
-
kevent.
udata
¶ Определяемые пользователем значение.