select
— Ожидание завершения ввода-вывода¶
Этот модуль обеспечивает доступ к функциям select()
и poll()
, доступным в большинстве операционных систем, devpoll()
, доступным в Solaris и его производных, :c: func:!epoll доступен в Linux 2.5+ и kqueue()
доступен в большинстве BSD. Обратите внимание, что в Windows это работает только для сокетов; в других операционных системах он также работает и для других типов файлов (в частности, в Unix он работает с каналами). Его нельзя использовать для обычных файлов, чтобы определить, увеличился ли файл с момента его последнего чтения.
Informacja
Модуль selectors
забезпечує високорівневе й ефективне мультиплексування вводу/виводу, побудоване на основі примітивів модуля select
. Замість цього користувачам рекомендується використовувати модуль selectors
, якщо вони не бажають точного контролю над використовуваними примітивами рівня ОС.
Dostępność: not WASI.
Этот модуль не работает или недоступен в WebAssembly. См. Платформы веб-сборки для получения дополнительной информации.
Модуль визначає наступне:
- select.devpoll()¶
(Підтримується лише в Solaris і похідних.) Повертає об’єкт опитування
/dev/poll
; дивіться розділ /dev/poll Опитування об’єктів нижче щодо методів, які підтримуються об’єктами devpoll.Объекты
devpoll()
связаны с количеством файловых дескрипторов, разрешенных на момент создания экземпляра. Если ваша программа уменьшит это значение,devpoll()
завершится ошибкой. Если ваша программа увеличивает это значение,devpoll()
может вернуть неполный список активных файловых дескрипторов.Новий файловий дескриптор не успадковується.
Dodane w wersji 3.3.
Zmienione w wersji 3.4: Новий файловий дескриптор тепер не успадковується.
- select.epoll(sizehint=-1, flags=0)¶
(Підтримується лише в Linux 2.5.44 і новіших версіях.) Повертає об’єкт опитування краю, який можна використовувати як інтерфейс Edge або Level Triggered для подій введення/виведення.
sizehint сообщает epoll об ожидаемом количестве событий, которые необходимо зарегистрировать. Оно должно быть положительным или
-1
, чтобы использовать значение по умолчанию. Он используется только в старых системах, гдеepoll_create1()
недоступен; в противном случае он не имеет никакого эффекта (хотя его значение все равно проверяется).flags застаріло та повністю ігнорується. Однак, коли надається, його значення має бути
0
абоselect.EPOLL_CLOEXEC
, інакшеOSError
викликається.Перегляньте розділ Опитування (epoll) об’єктів тригера краю та рівня нижче, щоб дізнатися про методи, які підтримуються об’єктами електронного опитування.
Об’єкти
epoll
підтримують протокол керування контекстом: при використанні в операторіwith
новий дескриптор файлу автоматично закривається в кінці блоку.Новий файловий дескриптор не успадковується.
Zmienione w wersji 3.3: Додано параметр flags.
Zmienione w wersji 3.4: Додано підтримку оператора
with
. Новий файловий дескриптор тепер не успадковується.Niezalecane od wersji 3.4: Параметр flags.
select.EPOLL_CLOEXEC
зараз використовується за умовчанням. Використовуйтеos.set_inheritable()
, щоб зробити дескриптор файлу спадковим.
- select.poll()¶
(Підтримується не всіма операційними системами.) Повертає об’єкт опитування, який підтримує реєстрацію та скасування реєстрації дескрипторів файлів, а потім опитування їх для подій введення/виведення; дивіться розділ Об’єкти опитування нижче щодо методів, які підтримуються об’єктами опитування.
- select.kqueue()¶
(Підтримується лише в BSD.) Повертає об’єкт черги ядра; перегляньте розділ Об’єкти Kqueue нижче, щоб дізнатися про методи, які підтримуються об’єктами kqueue.
Новий файловий дескриптор не успадковується.
Zmienione w wersji 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()
(який дійсно повертає дескриптор файлу, а не просто випадкове ціле число).Informacja
Файловые объекты в Windows неприемлемы, а сокеты — допустимы. В Windows базовая функция
select()
предоставляется библиотекой WinSock и не обрабатывает дескрипторы файлов, не происходящие из WinSock.Zmienione w wersji 3.5: Функція тепер виконується повторно з переобчисленим тайм-аутом, якщо її перериває сигнал, за винятком випадків, коли обробник сигналу викликає виняток (перегляньте PEP 475 для обґрунтування), замість того, щоб викликати
InterruptedError
.
- select.PIPE_BUF¶
Минимальное количество байтов, которые могут быть записаны в канал без блокировки, когда канал сообщается о готовности к записи с помощью
select()
,poll()
или другого интерфейса в этом модуле. Это не относится к другим типам файловых объектов, таким как сокеты.POSIX гарантує, що це значення буде не менше 512.
Dostępność: Unix
Dodane w wersji 3.2.
/dev/poll
Опитування об’єктів¶
Solaris и его производные имеют /dev/poll
. В то время как select()
имеет значение O(самый высокий файловый дескриптор), а poll()
имеет значение O(количество файловых дескрипторов), /dev /poll
— это O(активные файловые дескрипторы).
Поведение /dev/poll
очень близко к стандартному объекту poll()
.
- devpoll.close()¶
Закрийте файловий дескриптор об’єкта опитування.
Dodane w wersji 3.4.
- devpoll.closed¶
True
, якщо об’єкт опитування закрито.Dodane w wersji 3.4.
- devpoll.fileno()¶
Повертає номер дескриптора файлу об’єкта опитування.
Dodane w wersji 3.4.
- devpoll.register(fd[, eventmask])¶
Зареєструйте дескриптор файлу з об’єктом опитування. Подальші виклики методу
poll()
перевірятимуть, чи є в дескрипторі файлу будь-які незавершені події введення/виведення. fd може бути або цілим числом, або об’єктом із методомfileno()
, який повертає ціле число. Файлові об’єкти реалізуютьfileno()
, тому їх також можна використовувати як аргумент.eventmask — необязательная битовая маска, описывающая тип событий, которые вы хотите проверить. Константы такие же, как и в объекте
poll()
. Значение по умолчанию представляет собой комбинацию константPOLLIN
,POLLPRI
иPOLLOUT
.Ostrzeżenie
Регистрация уже зарегистрированного файлового дескриптора не является ошибкой, но результат не определен. Соответствующее действие — сначала отменить регистрацию или изменить его. Это важное отличие от
poll()
.
- devpoll.modify(fd[, eventmask])¶
Цей метод виконує
unregister()
, а потімregister()
. Це (трохи) ефективніше, ніж робити те саме явно.
- devpoll.unregister(fd)¶
Видаліть дескриптор файлу, який відстежується об’єктом опитування. Як і метод
register()
, fd може бути цілим числом або об’єктом із методомfileno()
, який повертає ціле число.Спроба видалити дескриптор файлу, який ніколи не був зареєстрований, безпечно ігнорується.
- devpoll.poll([timeout])¶
Опрашивает набор зарегистрированных файловых дескрипторов и возвращает, возможно, пустой список, содержащий двухкортежи
(fd, event)
для дескрипторов, у которых есть события или ошибки, о которых необходимо сообщить. fd — это дескриптор файла, а event — это битовая маска с битами, установленными для сообщаемых событий для этого дескриптора —POLLIN
для ожидания ввода,POLLOUT
для указания того, что дескриптор может быть записанным и так далее. Пустой список означает, что время ожидания вызова истекло и ни у одного файлового дескриптора не было событий, о которых можно было бы сообщить. Если задано значение timeout, оно определяет продолжительность времени в миллисекундах, в течение которого система будет ожидать событий перед возвратом. Если timeout опущен, -1 илиNone
, вызов будет блокироваться до тех пор, пока не произойдет событие для этого объекта опроса.Zmienione w wersji 3.5: Функція тепер виконується повторно з переобчисленим тайм-аутом, якщо її перериває сигнал, за винятком випадків, коли обробник сигналу викликає виняток (перегляньте PEP 475 для обґрунтування), замість того, щоб викликати
InterruptedError
.
Опитування (epoll) об’єктів тригера краю та рівня¶
https://linux.die.net/man/4/epoll
маска події
Stała
Znaczenie
EPOLLIN
Доступний для читання
EPOLLOUT
Доступний для запису
EPOLLPRI
Термінові дані для читання
EPOLLERR
Сталася помилка на доц. fd
EPOLLHUP
Зависання сталося на доц. fd
EPOLLET
Встановіть поведінку Edge Trigger, за замовчуванням це Level Trigger
EPOLLONESHOT
Встановіть одноразову поведінку. Після вилучення однієї події fd внутрішньо вимикається
EPOLLEXCLUSIVE
Розбудити лише один об’єкт epoll, якщо пов’язаний fd має подію. За замовчуванням (якщо цей прапорець не встановлено) всі об’єкти epoll запитуються на fd.
EPOLLRDHUP
Потоковий сокет закрив однорангове з’єднання або завершив запис половини з’єднання.
EPOLLRDNORM
Sama dengan
EPOLLIN
EPOLLRDBAND
Смугу пріоритетних даних можна зчитувати.
EPOLLWRNORM
Sama dengan
EPOLLOUT
EPOLLWRBAND
Пріоритетні дані можуть бути записані.
EPOLLMSG
Ігнорується.
Dodane w wersji 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.
Zmienione w wersji 3.9: Метод більше не ігнорує помилку
EBADF
.
- epoll.poll(timeout=None, maxevents=-1)¶
Чекайте подій. тайм-аут у секундах (float)
Zmienione w wersji 3.5: Функція тепер виконується повторно з переобчисленим тайм-аутом, якщо її перериває сигнал, за винятком випадків, коли обробник сигналу викликає виняток (перегляньте PEP 475 для обґрунтування), замість того, щоб викликати
InterruptedError
.
Об’єкти опитування¶
Системный вызов poll()
, поддерживаемый большинством систем Unix, обеспечивает лучшую масштабируемость сетевых серверов, которые обслуживают множество клиентов одновременно. poll()
масштабируется лучше, потому что системный вызов требует только перечисления интересующих файловых дескрипторов, а select()
строит растровое изображение, включает биты для интересующих файловых файлов, а затем после этого все растровое изображение необходимо снова линейно сканировать. select()
— это O(самый высокий файловый дескриптор), а poll()
— это O(количество файловых дескрипторов).
- poll.register(fd[, eventmask])¶
Зареєструйте дескриптор файлу з об’єктом опитування. Подальші виклики методу
poll()
перевірятимуть, чи є в дескрипторі файлу будь-які незавершені події введення/виведення. fd може бути або цілим числом, або об’єктом із методомfileno()
, який повертає ціле число. Файлові об’єкти реалізуютьfileno()
, тому їх також можна використовувати як аргумент.eventmask — це необов’язкова бітова маска, що описує тип подій, які ви хочете перевірити, і може бути комбінацією констант
POLLIN
,POLLPRI
іPOLLOUT
, описаних у таблицю нижче. Якщо не вказано, значення за умовчанням перевірятиме всі 3 типи подій.Stała
Znaczenie
POLLIN
Є дані для читання
POLLPRI
Є термінові дані для читання
POLLOUT
Готовий до виведення: запис не блокуватиметься
POLLERR
Якась помилка
POLLHUP
Повісив
POLLRDHUP
Закрите однорангове з’єднання потокового сокета або завершіть запис половини з’єднання
POLLNVAL
Недійсний запит: дескриптор не відкрито
Реєстрація дескриптора файлу, який уже зареєстровано, не є помилкою та має той самий ефект, що й одноразова реєстрація дескриптора.
- poll.modify(fd, eventmask)¶
Змінює вже зареєстрований fd. Це має той самий ефект, що й
register(fd, eventmask)
. Спроба змінити дескриптор файлу, який ніколи не був зареєстрований, викликає винятокOSError
з errnoENOENT
.
- poll.unregister(fd)¶
Видаліть дескриптор файлу, який відстежується об’єктом опитування. Як і метод
register()
, fd може бути цілим числом або об’єктом із методомfileno()
, який повертає ціле число.Спроба видалити дескриптор файлу, який ніколи не був зареєстрований, викликає виняток
KeyError
.
- poll.poll([timeout])¶
Опрашивает набор зарегистрированных файловых дескрипторов и возвращает, возможно, пустой список, содержащий двухкортежи
(fd, event)
для дескрипторов, у которых есть события или ошибки, о которых необходимо сообщить. fd — это дескриптор файла, а event — это битовая маска с битами, установленными для сообщаемых событий для этого дескриптора —POLLIN
для ожидания ввода,POLLOUT
для указания того, что дескриптор может быть записанным и так далее. Пустой список означает, что время ожидания вызова истекло и ни у одного файлового дескриптора не было событий, о которых можно было бы сообщить. Если задано значение timeout, оно определяет продолжительность времени в миллисекундах, в течение которого система будет ожидать событий перед возвратом. Если timeout опущен, имеет отрицательное значение илиNone
, вызов будет блокироваться до тех пор, пока не произойдет событие для этого объекта опроса.Zmienione w wersji 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 ¶
Низькорівневий інтерфейс для kevent
список змін має бути ітерованим об’єктами kevent або
None
max_events має бути 0 або додатним цілим числом
тайм-аут у секундах (можливі флоати); типовим є
None
, чекати вічно
Zmienione w wersji 3.5: Функція тепер виконується повторно з переобчисленим тайм-аутом, якщо її перериває сигнал, за винятком випадків, коли обробник сигналу викликає виняток (перегляньте PEP 475 для обґрунтування), замість того, щоб викликати
InterruptedError
.
Об’єкти Kevent¶
https://man.freebsd.org/cgi/man.cgi?query=kqueue&sektion=2
- kevent.ident¶
Значення, що використовується для ідентифікації події. Інтерпретація залежить від фільтра, але зазвичай це дескриптор файлу. У конструкторі ident може бути або int, або об’єктом із методом
fileno()
. kevent зберігає ціле число всередині.
- kevent.filter¶
Назва фільтра ядра.
Stała
Znaczenie
KQ_FILTER_READ
Бере дескриптор і повертає, коли є дані, доступні для читання
KQ_FILTER_WRITE
Бере дескриптор і повертає щоразу, коли є дані для запису
KQ_FILTER_AIO
запити AIO
KQ_FILTER_VNODE
Повертається, коли відбувається одна або кілька запитаних подій, які переглядаються в fflag
KQ_FILTER_PROC
Слідкуйте за подіями в ідентифікаторі процесу
KQ_FILTER_NETDEV
Стежити за подіями на мережевому пристрої [недоступно в macOS]
KQ_FILTER_SIGNAL
Повертається щоразу, коли спостережуваний сигнал надходить до процесу
KQ_FILTER_TIMER
Встановлює довільний таймер
- kevent.flags¶
Дія фільтра.
Stała
Znaczenie
KQ_EV_ADD
Додає або змінює подію
KQ_EV_DELETE
Вилучає подію з черги
KQ_EV_ENABLE
Permitscontrol() to повертає подію
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
позначки фільтрів:Stała
Znaczenie
KQ_NOTE_LOWAT
низька позначка буфера сокета
KQ_FILTER_VNODE
позначки фільтра:Stała
Znaczenie
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
позначки фільтра:Stała
Znaczenie
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
позначки фільтра (недоступні в macOS):Stała
Znaczenie
KQ_NOTE_LINKUP
посилання працює
KQ_NOTE_LINKDOWN
посилання не працює
KQ_NOTE_LINKINV
стан посилання недійсний
- kevent.data¶
Фільтр конкретних даних.
- kevent.udata¶
Визначене користувачем значення.