il seguente codice essenzialmente gatti un file con select.select():Perché select.select() funziona con i file su disco ma non 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)
Quando provo una cosa simile con epoll ottengo un errore:
self._impl.register(fd, events | self.ERROR)
IOError: [Errno 1] Operation not permitted
Ho anche letto che epoll non supporta i file su disco, o forse non ha senso.
Ma perché non selezionare) i file su disco di supporto (allora? Ho esaminato l'implementazione in selectmodule.c e sembra passare solo al sistema operativo, cioè Python non sta aggiungendo alcun supporto speciale.
A un livello superiore sto sperimentando il modo migliore per servire file statici in un server non bloccante. Credo che proverò a creare i thread I/O che leggono dal disco e alimentano i dati al thread del ciclo degli eventi principale che scrive sui socket.
ah ok, quindi il mio os.read() chiamare il ciclo di selezione sta bloccando quindi. ha senso. –
@ user1117755 Sì, sta bloccando se deve attendere il disco rigido. – nos