La chiamata di sistema poll(), supportata su molti sistemi Unix, fornisce migliore scalabilità per server di rete che devono servire moltissimi client contemporaneamente. poll() ha una scalabilità migliore perché la chiamata di sistema richiede solo la lista dei descrittori di file di interesse, mentre select() costruisce una bitmap, abilita i bit per i descrittori di file di interesse, e quindi di conseguenza l'intera bitmap deve essere analizzata linearmente di nuovo. select() è O(file descriptor più alto), mentre poll() è O(numero di file descriptor).
fd[, eventmask]) |
eventmask è una bitmask opzionale che descrive il tipo di eventi che si vogliono controllare, e può essere una combinazione delle costanti POLLIN, POLLPRI e POLLOUT, descritte nella tabella sottostante. Se non specificato, il valore predefinito usato controllerà tutti e tre 3 i tipi di eventi.
Costante | Significato |
---|---|
POLLIN | Non ci sono dati da leggere |
POLLPRI | Ci sono dati urgenti da leggere |
POLLOUT | Pronto per l'output: la scrittura non bloccherà |
POLLERR | Condizione di errore di un qualche tipo |
POLLHUP | Attesa |
POLLNVAL | Richiesta non valida: descrittore non aperto |
Registrare un descrittore di file che è già registrato non significa un errore, ha lo stesso effetto di registrare il descrittore una volta sola.
fd) |
Tentare di rimuovere un descrittore di file che non è mai stato registrato causerà il sollevamento dell'eccezione KeyError.
[timeout]) |
(fd, event)
per i descrittori che hanno eventi o
errori da riportare. fd è il descrittore di file, mentre
event è una bitmask con bit impostati per gli eventi riportati
per quel descrittore -- POLLIN per input in attesa,
POLLOUT per indicare che sul descrittore vi si può
scrivere, e cosi via.
Una lista vuota indica che la chiamata è andata in timeout e
nessun descrittore di file ha alcun evento da riportare.
Se viene passato, timeout specifica il periodo di tempo in
millisecondi durante il quale sistema aspetterà degli eventi prima di
terminare la chiamata.
Se timeout è omesso, negativo o None, la chiamata si
bloccherà fino a che non apparirà un evento per questo oggetto poll.