select
– wait for events on a set of streams¶
Avertissement
Though this MicroPython-based library may be available for use in some builds of CircuitPython, it is unsupported and its functionality may change in the future, perhaps significantly. As CircuitPython continues to develop, it may be changed to comply more closely with the corresponding standard Python library. You will likely need to change your code later if you rely on any non-standard functionality it currently provides.
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
stream
objects (select streams which are ready for operations).
Functions¶
- select.poll()¶
Create an instance of the Poll class.
- 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(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
andselect.POLLERR
are not valid as input eventmask (these are unsolicited events which will be returned frompoll()
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(obj)¶
Unregister obj from polling.
- poll.modify(obj, eventmask)¶
Modify the eventmask for obj. If obj is not registered,
OSError
is raised with error of ENOENT.
- 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. Theevent
element specifies which events happened with a stream and is a combination ofselect.POLL*
constants described above. Note that flagsselect.POLLHUP
andselect.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 ofpoll()
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(timeout=-1, flags=0, /)¶
Like
poll.poll()
, but instead returns an iterator which yields acallee-owned tuples
. This function provides 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 withpoll.modify()
. This behaviour is useful for asynchronous I/O schedulers.Difference to CPython
This function is a MicroPython extension.