Тайм-аут анонимного набора каналов Python



У меня есть ощущение, что это невозможно; но есть ли способ установить тайм-аут чтения на анонимном канале в Python / C на Linux?



Есть ли лучшие варианты, чем установка и захват SIGALRM?



>>> import os
>>> output, input = os.pipe()
>>> outputfd = os.fdopen(output, 'r')
>>> dir(outputfd)
['__class__', '__delattr__', '__doc__', '__enter__', '__exit__', '__format__', '__getattribute__', '__hash__', '__init__', '__iter__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'close', 'closed', 'encoding', 'errors', 'fileno', 'flush', 'isatty', 'mode', 'name', 'newlines', 'next', 'read', 'readinto', 'readline', 'readlines', 'seek', 'softspace', 'tell', 'truncate', 'write', 'writelines', 'xreadlines']
>>>


(нет метода settimeout())

559   2  

2 ответов:

Вы должны попробовать использовать модуль select, который позволяет вам предоставить тайм-аут. Добавьте объект file в набор select, а затем проверьте объект return, чтобы увидеть, изменился ли он:

r, w, x = select.select([output], [], [], timeout)

Затем исследуйте r, чтобы увидеть, читаем ли объект. Это можно распространить на любое количество объектов, которые вы хотите контролировать. Если объект находится в r, то выполните чтение: output.read().

Кроме того, вы можете использовать os.read, а не fdopen, так как он не будет подчиняться капризам файла Python буферизация.

Это не прямая настройка,но вы можете использовать select в файловом дескрипторе для ожидания ввода. Это встроенный модуль, который поддерживает все файловые дескрипторы в Unix, но только сокеты в OpenVMS и Windows (со страницы pydoc на select).

Comments

    Ничего не найдено.