Читать только столько, сколько доступно в Python - PullRequest
0 голосов
/ 03 декабря 2018

Предположим, что структура уведомлений ввода / вывода (например, select или часы GLib) только что уведомила меня о наличии данных, доступных по каналу.Предположим, что базовый файловый дескриптор находится в режиме блокировки, а не неблокирования.Как я могу прочитать столько данных, сколько доступно сразу, без блокировки?

Используя API системных вызовов Unix, я бы просто позвонил read().Кажется, что метод Python read() для файловоподобных объектов имеет более сложное поведение - документация не совсем ясна, но у меня складывается впечатление, что он пытается выполнить несколько операций чтения ОС низкого уровня, пока не получит запрошенное число байтов или конец-of-файл.Чтобы прочитать только то, что доступно сразу, я должен получить базовый номер дескриптора файла и вызвать os.read() для этого?

Кроме того, я могу вызвать os.read() в цикле, пока он не вернет меньше, чемзапрашиваемое количество байтов?То есть я могу делать этот цикл каждый раз, когда select уведомляет меня о наличии данных?Есть ли риск блокировки?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...