el siguiente código esencialmente gatos un archivo con select.select():¿Por qué select.select() funciona con archivos de disco pero no con 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)
Cuando intento algo similar con epoll Me aparece un error:
self._impl.register(fd, events | self.ERROR)
IOError: [Errno 1] Operation not permitted
También he leído que epoll no admite archivos de disco, o tal vez no tenga sentido.
Pero ¿por qué no seleccionar) los archivos del disco de soporte (entonces? Miré la implementación en selectmodule.c y parece que solo está yendo al sistema operativo, es decir, Python no agrega ningún soporte especial.
En un nivel superior estoy experimentando con la mejor manera de servir archivos estáticos en un servidor sin bloqueo. Supongo que intentaré crear subprocesos de E/S que se leen desde el disco y alimentar los datos al subproceso de bucle de evento principal que se escribe en los sockets.
Ah OK, así que mi os.read() en el lazo de selección está bloqueando entonces. tiene sentido. –
@ user1117755 Sí, está bloqueando si tiene que esperar al disco duro. – nos