uselect – 在一组流中等待事件

该模块实现相应 CPython 模块的子集,如下所示。更多信息,请参见

This module implements a subset of the corresponding CPython module, as described below. For more information, refer to the original CPython documentation: select.

该模块提供用以在流中等待事件的函数(选择用于操作的流)。

函数

uselect.poll()

创建轮询类的实例。

uselect.select(rlist, wlist, xlist[, timeout])

等待一组对象上的活动。

这个函数为兼容性设计,效率不高。建议使用 Poll

Poll

方法

poll.register(obj[, eventmask])

注册用于轮询的 objeventmask 是下列的逻辑或:

  • select.POLLIN - 用于读取的数据

  • select.POLLOUT - 可写入更多数据

请注意,像 uselect.POLLHUPuselect.POLLERR 这样的标志作为输入事件掩码是 无效 的 (这些是未经请求的事件,无论是否被请求,都将从 poll() 返回)。此语义符合 POSIX。

eventmask 默认值为 select.POLLIN | select.POLLOUT.

对于同一个 obj ,可以多次调用这个函数。 连续调用会将 obj 的事件掩码更新为 eventmask 的值(也就是说,将表现为 modify() )。

poll.unregister(obj)

注销轮询的 obj

poll.modify(obj, eventmask)

修改 objeventmask 。如果 obj 没有被注册,则会引发 OSError ,并显示ENOENT错误。

poll.poll(timeout=-1)

等待至少一个已注册的对象准备就绪或处于异常状态,并带有以毫秒为单位的可选超时(以毫秒为单位)(如果 timeout 未指定或为-1,则不存在超时)。

返回( obj , event , …)的元组列表。元组中可能还有其他元素,具体取决于平台和版本,因此请不要假定其大小为2。 event event元素指定流中发生了哪些事件,并且是上述 uselect.POLL* 常量的组合。 注意标记 uselect.POLLHUPuselect.POLLERR 可以在任何时候返回(即使没有被请求), 并且必须对其进行相应的操作(相应的流已从轮询中注销并可能已关闭),因为否则所有对 poll() 的进一步调用都可能立即返回,并再次为此流设置这些标志。

如果超时,则返回一个空列表。

与CPython区别

如上所述,返回的元组可能包括多于2个元素。

poll.ipoll(timeout=-1, flags=0)

poll.poll() 类似,但是返回一个产生被调用函数所有元组的迭代器。该函数提供高效的、无位置的在流中进行轮询的方法。

如果 flags 为1,则采用事件的一次性行为:发生事件的流将自动重置其事件掩码(相当于 poll.modify(obj, 0) ), 因此针对此类事件的新事件在使用 poll.modify() 设置新的掩码之前,流将不会被处理。此行为对于异步I/O调度程序很有用。

与CPython区别

该函数是MicroPython的扩展。