Следующий код по существу кошкам файл с select.select():Почему select.select() работает с файлами диска, но не epoll()?
f = open('node.py')
fd = f.fileno()
while True:
r, w, e = select.select([fd], [], [])
print '>', repr(os.read(fd, 10))
time.sleep(1)
Когда я пытаюсь подобную вещь с Epoll я получаю сообщение об ошибке:
self._impl.register(fd, events | self.ERROR)
IOError: [Errno 1] Operation not permitted
Я также читал, что Epoll не поддерживает файлы на диске - или, возможно, это не имеет смысла.
Но почему же выбрать файлы) Поддержка дисков (тогда? Я посмотрел на реализацию в selectmodule.c и, похоже, просто перешел к операционной системе, то есть Python не добавляет никакой специальной поддержки.
На более высоком уровне я экспериментирую с лучшим способом обслуживания статических файлов на неблокирующем сервере. Думаю, я попытаюсь создать потоки ввода-вывода, которые читают с диска и подают данные в поток цикла основного события, который записывает в сокеты.
Ах ОК, так что мой os.read() вызов в тогда цикл выбора блокируется. имеет смысл. –
@ user1117755 Да, он блокируется, если ему приходится ждать жесткого диска. – nos