blob: f3186c40030909f5716730ae7395036f7fe279d8 [file] [log] [blame]
Fred Drake295da241998-08-10 19:42:37 +00001\section{\module{select} ---
Fred Drakebbac4321999-02-20 00:14:17 +00002 Waiting for I/O completion}
Fred Drakeb91e9341998-07-23 17:59:49 +00003
Fred Drakebbac4321999-02-20 00:14:17 +00004\declaremodule{builtin}{select}
Fred Drakeb91e9341998-07-23 17:59:49 +00005\modulesynopsis{Wait for I/O completion on multiple streams.}
6
Guido van Rossum5fdeeea1994-01-02 01:22:07 +00007
Andrew M. Kuchling99a37012000-08-25 01:21:28 +00008This module provides access to the \cfunction{select()}
9and \cfunction{poll()} functions
Guido van Rossum9814a941998-09-28 14:28:38 +000010available in most operating systems. Note that on Windows, it only
11works for sockets; on other operating systems, it also works for other
Fred Drakec37b65e2001-11-28 07:26:15 +000012file types (in particular, on \UNIX, it works on pipes). It cannot
Fred Drake38e5d272000-04-03 20:13:55 +000013be used on regular files to determine whether a file has grown since
Guido van Rossum9814a941998-09-28 14:28:38 +000014it was last read.
15
16The module defines the following:
Guido van Rossum5fdeeea1994-01-02 01:22:07 +000017
Guido van Rossum5fdeeea1994-01-02 01:22:07 +000018\begin{excdesc}{error}
19The exception raised when an error occurs. The accompanying value is
Fred Drakeb4016371998-04-02 18:44:38 +000020a pair containing the numeric error code from \cdata{errno} and the
21corresponding string, as would be printed by the \C{} function
22\cfunction{perror()}.
Guido van Rossum5fdeeea1994-01-02 01:22:07 +000023\end{excdesc}
24
Andrew M. Kuchling99a37012000-08-25 01:21:28 +000025\begin{funcdesc}{poll}{}
Fred Drakec95628e2003-04-29 13:56:40 +000026(Not supported by all operating systems.) Returns a polling object,
Andrew M. Kuchling99a37012000-08-25 01:21:28 +000027which supports registering and unregistering file descriptors, and
Fred Drakec95628e2003-04-29 13:56:40 +000028then polling them for I/O events;
29see section~\ref{poll-objects} below for the methods supported by
Andrew M. Kuchling99a37012000-08-25 01:21:28 +000030polling objects.
31\end{funcdesc}
32
Fred Drakecce10901998-03-17 06:33:25 +000033\begin{funcdesc}{select}{iwtd, owtd, ewtd\optional{, timeout}}
Fred Drakeb4016371998-04-02 18:44:38 +000034This is a straightforward interface to the \UNIX{} \cfunction{select()}
Brett Cannon62dba4c2003-09-10 19:37:42 +000035system call. The first three arguments are sequences of `waitable
Fred Drake5255c792000-12-11 15:50:07 +000036objects': either integers representing file descriptors or
Fred Drakeb4016371998-04-02 18:44:38 +000037objects with a parameterless method named \method{fileno()} returning
Brett Cannon62dba4c2003-09-10 19:37:42 +000038such an integer. The three sequences of waitable objects are for input,
39output and `exceptional conditions', respectively. Empty sequences are
40allowed, but acceptance of three empty sequences is platform-dependent.
Fred Drake5255c792000-12-11 15:50:07 +000041(It is known to work on \UNIX{} but not on Windows.) The optional
42\var{timeout} argument specifies a time-out as a floating point number
43in seconds. When the \var{timeout} argument is omitted the function
44blocks until at least one file descriptor is ready. A time-out value
45of zero specifies a poll and never blocks.
Guido van Rossum5fdeeea1994-01-02 01:22:07 +000046
47The return value is a triple of lists of objects that are ready:
48subsets of the first three arguments. When the time-out is reached
49without a file descriptor becoming ready, three empty lists are
50returned.
51
Brett Cannon62dba4c2003-09-10 19:37:42 +000052Among the acceptable object types in the sequences are Python file
Fred Drakeb4016371998-04-02 18:44:38 +000053objects (e.g. \code{sys.stdin}, or objects returned by
54\function{open()} or \function{os.popen()}), socket objects
Fred Drakec95628e2003-04-29 13:56:40 +000055returned by \function{socket.socket()}.%
Fred Drakeb4016371998-04-02 18:44:38 +000056\withsubitem{(in module socket)}{\ttindex{socket()}}
Fred Drakec95628e2003-04-29 13:56:40 +000057\withsubitem{(in module os)}{\ttindex{popen()}}
Fred Drake5255c792000-12-11 15:50:07 +000058You may also define a \dfn{wrapper} class yourself, as long as it has
59an appropriate \method{fileno()} method (that really returns a file
60descriptor, not just a random integer).
Fred Drake0aa811c2001-10-20 04:24:09 +000061\note{File objects on Windows are not acceptable, but sockets
62are.\index{WinSock} On Windows, the underlying \cfunction{select()}
63function is provided by the WinSock library, and does not handle file
64desciptors that don't originate from WinSock.}
Guido van Rossum5fdeeea1994-01-02 01:22:07 +000065\end{funcdesc}
Andrew M. Kuchling99a37012000-08-25 01:21:28 +000066
67\subsection{Polling Objects
68 \label{poll-objects}}
69
Fred Drakec37b65e2001-11-28 07:26:15 +000070The \cfunction{poll()} system call, supported on most \UNIX{} systems,
Andrew M. Kuchling99a37012000-08-25 01:21:28 +000071provides better scalability for network servers that service many,
72many clients at the same time.
73\cfunction{poll()} scales better because the system call only
74requires listing the file descriptors of interest, while \cfunction{select()}
75builds a bitmap, turns on bits for the fds of interest, and then
76afterward the whole bitmap has to be linearly scanned again.
77\cfunction{select()} is O(highest file descriptor), while
78\cfunction{poll()} is O(number of file descriptors).
79
80\begin{methoddesc}{register}{fd\optional{, eventmask}}
81Register a file descriptor with the polling object. Future calls to
82the \method{poll()} method will then check whether the file descriptor
83has any pending I/O events. \var{fd} can be either an integer, or an
84object with a \method{fileno()} method that returns an integer. File
85objects implement
86\method{fileno()}, so they can also be used as the argument.
87
88\var{eventmask} is an optional bitmask describing the type of events you
89want to check for, and can be a combination of the constants
90\constant{POLLIN}, \constant{POLLPRI}, and \constant{POLLOUT},
91described in the table below. If not specified, the default value
92used will check for all 3 types of events.
93
Fred Drake9bbc9332001-07-11 18:48:39 +000094\begin{tableii}{l|l}{constant}{Constant}{Meaning}
Andrew M. Kuchling99a37012000-08-25 01:21:28 +000095 \lineii{POLLIN}{There is data to read}
96 \lineii{POLLPRI}{There is urgent data to read}
97 \lineii{POLLOUT}{Ready for output: writing will not block}
98 \lineii{POLLERR}{Error condition of some sort}
99 \lineii{POLLHUP}{Hung up}
100 \lineii{POLLNVAL}{Invalid request: descriptor not open}
101\end{tableii}
102
103Registering a file descriptor that's already registered is not an
104error, and has the same effect as registering the descriptor exactly
Fred Drakec95628e2003-04-29 13:56:40 +0000105once.
Andrew M. Kuchling99a37012000-08-25 01:21:28 +0000106\end{methoddesc}
107
108\begin{methoddesc}{unregister}{fd}
109Remove a file descriptor being tracked by a polling object. Just like
110the \method{register()} method, \var{fd} can be an integer or an
111object with a \method{fileno()} method that returns an integer.
112
113Attempting to remove a file descriptor that was never registered
114causes a \exception{KeyError} exception to be raised.
115\end{methoddesc}
116
117\begin{methoddesc}{poll}{\optional{timeout}}
118Polls the set of registered file descriptors, and returns a
119possibly-empty list containing \code{(\var{fd}, \var{event})} 2-tuples
120for the descriptors that have events or errors to report.
Fred Drakec95628e2003-04-29 13:56:40 +0000121\var{fd} is the file descriptor, and \var{event} is a bitmask
Andrew M. Kuchling99a37012000-08-25 01:21:28 +0000122with bits set for the reported events for that descriptor
Fred Drakec95628e2003-04-29 13:56:40 +0000123--- \constant{POLLIN} for waiting input,
Andrew M. Kuchling99a37012000-08-25 01:21:28 +0000124\constant{POLLOUT} to indicate that the descriptor can be written to, and
125so forth.
126An empty list indicates that the call timed out and no file
127descriptors had any events to report.
Fred Drake9bbc9332001-07-11 18:48:39 +0000128If \var{timeout} is given, it specifies the length of time in
129milliseconds which the system will wait for events before returning.
Fred Drakec95628e2003-04-29 13:56:40 +0000130If \var{timeout} is omitted, negative, or \constant{None}, the call will
Fred Drake9bbc9332001-07-11 18:48:39 +0000131block until there is an event for this poll object.
Andrew M. Kuchling99a37012000-08-25 01:21:28 +0000132\end{methoddesc}