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])¶
注册用于轮询的
obj
。eventmask
是下列的逻辑或:select.POLLIN
- 用于读取的数据select.POLLOUT
- 可写入更多数据
请注意,像
uselect.POLLHUP
和uselect.POLLERR
这样的标志作为输入事件掩码是 无效 的 (这些是未经请求的事件,无论是否被请求,都将从poll()
返回)。此语义符合 POSIX。eventmask 默认值为
select.POLLIN | select.POLLOUT
.对于同一个 obj ,可以多次调用这个函数。 连续调用会将 obj 的事件掩码更新为 eventmask 的值(也就是说,将表现为
modify()
)。
- poll.unregister(obj)¶
注销轮询的 obj 。
- poll.poll(timeout=-1)¶
等待至少一个已注册的对象准备就绪或处于异常状态,并带有以毫秒为单位的可选超时(以毫秒为单位)(如果 timeout 未指定或为-1,则不存在超时)。
返回(
obj
,event
, …)的元组列表。元组中可能还有其他元素,具体取决于平台和版本,因此请不要假定其大小为2。event
event元素指定流中发生了哪些事件,并且是上述uselect.POLL*
常量的组合。 注意标记uselect.POLLHUP
和uselect.POLLERR
可以在任何时候返回(即使没有被请求), 并且必须对其进行相应的操作(相应的流已从轮询中注销并可能已关闭),因为否则所有对poll()
的进一步调用都可能立即返回,并再次为此流设置这些标志。如果超时,则返回一个空列表。
与CPython区别
如上所述,返回的元组可能包括多于2个元素。
- poll.ipoll(timeout=-1, flags=0)¶
与
poll.poll()
类似,但是返回一个产生被调用函数所有元组的迭代器。该函数提供高效的、无位置的在流中进行轮询的方法。如果 flags 为1,则采用事件的一次性行为:发生事件的流将自动重置其事件掩码(相当于
poll.modify(obj, 0)
), 因此针对此类事件的新事件在使用poll.modify()
设置新的掩码之前,流将不会被处理。此行为对于异步I/O调度程序很有用。与CPython区别
该函数是MicroPython的扩展。