2021-08-12 04:59:29 +01:00
|
|
|
:mod:`select` -- wait for events on a set of streams
|
|
|
|
====================================================
|
2014-10-31 01:37:19 +00:00
|
|
|
|
2021-08-12 04:59:29 +01:00
|
|
|
.. module:: select
|
2014-11-08 18:14:05 +00:00
|
|
|
:synopsis: wait for events on a set of streams
|
2014-10-31 01:37:19 +00:00
|
|
|
|
2017-07-02 13:37:31 +01:00
|
|
|
|see_cpython_module| :mod:`python:select`.
|
|
|
|
|
2017-06-16 09:28:06 +01:00
|
|
|
This module provides functions to efficiently wait for events on multiple
|
2017-12-04 16:36:20 +00:00
|
|
|
`streams <stream>` (select streams which are ready for operations).
|
2014-10-31 01:37:19 +00:00
|
|
|
|
|
|
|
Functions
|
|
|
|
---------
|
|
|
|
|
|
|
|
.. function:: poll()
|
|
|
|
|
2014-10-31 22:21:37 +00:00
|
|
|
Create an instance of the Poll class.
|
2014-10-31 01:37:19 +00:00
|
|
|
|
|
|
|
.. function:: select(rlist, wlist, xlist[, timeout])
|
|
|
|
|
2014-10-31 22:21:37 +00:00
|
|
|
Wait for activity on a set of objects.
|
2014-10-31 01:37:19 +00:00
|
|
|
|
2017-06-16 09:28:06 +01:00
|
|
|
This function is provided by some MicroPython ports for compatibility
|
|
|
|
and is not efficient. Usage of :class:`Poll` is recommended instead.
|
2014-11-08 18:14:05 +00:00
|
|
|
|
2014-10-31 22:21:37 +00:00
|
|
|
.. _class: Poll
|
2014-10-31 01:37:19 +00:00
|
|
|
|
2014-10-31 22:21:37 +00:00
|
|
|
class ``Poll``
|
|
|
|
--------------
|
2014-10-31 01:37:19 +00:00
|
|
|
|
|
|
|
Methods
|
2014-10-31 22:21:37 +00:00
|
|
|
~~~~~~~
|
2014-10-31 01:37:19 +00:00
|
|
|
|
2014-10-31 22:21:37 +00:00
|
|
|
.. method:: poll.register(obj[, eventmask])
|
2014-10-31 01:37:19 +00:00
|
|
|
|
2017-12-04 16:36:20 +00:00
|
|
|
Register `stream` *obj* for polling. *eventmask* is logical OR of:
|
2015-11-09 20:10:02 +00:00
|
|
|
|
2021-08-12 04:59:29 +01:00
|
|
|
* ``select.POLLIN`` - data available for reading
|
|
|
|
* ``select.POLLOUT`` - more data can be written
|
2015-11-09 20:10:02 +00:00
|
|
|
|
2021-08-12 04:59:29 +01:00
|
|
|
Note that flags like ``select.POLLHUP`` and ``select.POLLERR`` are
|
2017-11-26 07:55:02 +00:00
|
|
|
*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.
|
|
|
|
|
2021-08-12 04:59:29 +01:00
|
|
|
*eventmask* defaults to ``select.POLLIN | select.POLLOUT``.
|
2014-10-31 01:37:19 +00:00
|
|
|
|
2018-09-28 20:05:45 +01:00
|
|
|
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()`).
|
|
|
|
|
2014-10-31 22:21:37 +00:00
|
|
|
.. method:: poll.unregister(obj)
|
2014-10-31 01:37:19 +00:00
|
|
|
|
2017-06-16 09:28:06 +01:00
|
|
|
Unregister *obj* from polling.
|
2014-10-31 01:37:19 +00:00
|
|
|
|
2014-10-31 22:21:37 +00:00
|
|
|
.. method:: poll.modify(obj, eventmask)
|
2014-10-31 01:37:19 +00:00
|
|
|
|
2018-09-28 20:05:45 +01:00
|
|
|
Modify the *eventmask* for *obj*. If *obj* is not registered, `OSError`
|
|
|
|
is raised with error of ENOENT.
|
2014-10-31 01:37:19 +00:00
|
|
|
|
2020-01-11 06:44:17 +00:00
|
|
|
.. method:: poll.poll(timeout=-1, /)
|
2014-10-31 22:21:37 +00:00
|
|
|
|
2017-11-26 07:55:02 +00:00
|
|
|
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
|
2021-08-12 04:59:29 +01:00
|
|
|
is a combination of ``select.POLL*`` constants described above. Note that
|
|
|
|
flags ``select.POLLHUP`` and ``select.POLLERR`` can be returned at any time
|
2017-11-26 07:55:02 +00:00
|
|
|
(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.
|
2017-06-16 09:28:06 +01:00
|
|
|
|
|
|
|
.. admonition:: Difference to CPython
|
|
|
|
:class: attention
|
|
|
|
|
|
|
|
Tuples returned may contain more than 2 elements as described above.
|
|
|
|
|
2020-01-11 06:44:17 +00:00
|
|
|
.. method:: poll.ipoll(timeout=-1, flags=0, /)
|
2017-06-16 09:28:06 +01:00
|
|
|
|
2017-12-03 13:07:46 +00:00
|
|
|
Like :meth:`poll.poll`, but instead returns an iterator which yields a
|
|
|
|
`callee-owned tuple`. This function provides an efficient, allocation-free
|
2017-06-16 09:28:06 +01:00
|
|
|
way to poll on streams.
|
|
|
|
|
2021-04-30 07:53:36 +01:00
|
|
|
If *flags* is 1, one-shot behaviour for events is employed: streams for
|
2017-11-30 18:32:49 +00:00
|
|
|
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
|
2021-04-30 07:53:36 +01:00
|
|
|
behaviour is useful for asynchronous I/O schedulers.
|
2017-10-25 22:28:45 +01:00
|
|
|
|
2017-06-16 09:28:06 +01:00
|
|
|
.. admonition:: Difference to CPython
|
|
|
|
:class: attention
|
|
|
|
|
|
|
|
This function is a MicroPython extension.
|