wait for events on a set of streams
select – wait for events on a set of streams
This module implements a subset of the corresponding CPython module, as described below. For more information, refer to the original CPython documentation: select.
This module provides functions to efficiently wait for events on multiple streams (select streams which are ready for operations).
Functions
select.poll
select.poll()Create an instance of the Poll class.
select.select
select.select(rlist, wlist, xlist, [timeout])Wait for activity on a set of objects.
This function is provided by some MicroPython ports for compatibility
and is not efficient. Usage of Poll is recommended instead.
class Poll
Methods
poll.register
poll.register(obj, [eventmask])Register stream obj for polling. eventmask is logical OR of:
select.POLLIN- data available for readingselect.POLLOUT- more data can be written
Note that flags like select.POLLHUP and select.POLLERR are
not valid as input eventmask (these are unsolicited events which
will be returned from poll() regardless of whether they are asked
for). This semantics is per POSIX.
eventmask defaults to select.POLLIN | select.POLLOUT.
It is OK to call this function multiple times for the same obj. Successive calls will update obj’s eventmask to the value of eventmask (i.e. will behave as modify()).
poll.unregister
poll.unregister(obj)Unregister obj from polling.
poll.modify
poll.modify(obj, eventmask)Modify the eventmask for obj. If obj is not registered, OSError is raised with error of ENOENT.
poll.poll
poll.poll(timeout=-1, /)Wait for at least one of the registered objects to become ready or have an exceptional condition, with optional timeout in milliseconds (if timeout arg is not specified or -1, there is no timeout).
Returns list of (obj, event, …) tuples. There may be other elements in
tuple, depending on a platform and version, so don’t assume that its size is 2.
The event element specifies which events happened with a stream and
is a combination of select.POLL* constants described above. Note that
flags select.POLLHUP and select.POLLERR can be returned at any time
(even if were not asked for), and must be acted on accordingly (the
corresponding stream unregistered from poll and likely closed), because
otherwise all further invocations of poll() may return immediately with
these flags set for this stream again.
In case of timeout, an empty list is returned.
Difference to CPython
Tuples returned may contain more than 2 elements as described above.
poll.ipoll
poll.ipoll(timeout=-1, flags=0, /)Like poll.poll(), but instead returns an iterator which yields a callee-owned tuple. This function provides an efficient, allocation-free way to poll on streams.
If flags is 1, one-shot behaviour for events is employed: streams for
which events happened will have their event masks automatically reset
(equivalent to poll.modify(obj, 0)), so new events for such a stream
won’t be processed until new mask is set with poll.modify(). This
behaviour is useful for asynchronous I/O schedulers.
Difference to CPython
This function is a MicroPython extension.
