doc:python-3.7.7-docs-html/library/selectors.html
它定义了一个抽象类BaseSelector,以及几个具体实现类。
在本文中, 文件对象指的是任何具有fileno()方法的对象或者文件描述符;
DefaultSelector:一般使用此类,它会自动选择当前环境中最有效的Selector。
类的等级:
BaseSelector
下文中,事件events是一个位掩码,用于说明文件对象的哪些事件被监听。
EVENT_READ:可读
EVENT_WRITE:可写
一般用这个类的实例描述一个已注册文件对象的状态。
常用属性:
fileobj:已注册的文件对象。File object registered.
fd:对应的文件对象描述符。Underlying file descriptor.
events:等待的事件。Events that must be waited for on this file object.
data:关联数据。Optional opaque data associated to this file object: for example, this could be used to store a per-client session ID.
等待多个fd的事件就绪。
支持文件流注册/取消。
它是抽象基类,因此无法实例化。
它支持上下文管理。
常用方法
abstractmethod register(fileobj, events, data=None)
注册一个文件对象以监听其事件。
fileobj是要监听的文件对象。它可以是整数(文件描述符)或有fileno()方法的对象。
它返回一个SelectorKey实例,或raises a ValueError,或KeyError。
abstractmethod unregister(fileobj)
从selection解除注册,从监听中移除。应该在关闭前注销。
fileobj必须是已注册的文件对象。
它返回关联的SelectorKey实例。或者抛出异常 KeyError(文件对象未注册)/ValueError(文件对象非法)。
modify(fileobj, events, data=None)
修改已注册文件对象的监听事件或数据。
相当于先调用BaseSelector.unregister(fileobj)()再调用BaseSelector.register(fileobj, events, data)(), 但它更高效。
它返回SelectorKey实例,或者抛出异常,具体内容同注册部分。
abstractmethod select(timeout=None)
等待直到注册对象的文件对象就绪,或者超时。
如果timeout > 0代表最大等待时间,单位秒。
如果timeout <= 0调用不阻塞,立即返回就绪的文件对象。
如果timeout为None,调用会防人之心不可无直到一个文件对象就绪。
它返回列表,列表元素为就绪文件对象的(key, events)组成的元组。
key是就绪对象的SelectorKey实例;事件是就绪事件的掩码。
注意:它可以在任意文件对象就绪或调用超时前返回,当然这种情况下返回的是空列表。
Changed in version 3.5: The selector is now retried with a recomputed timeout when interrupted by a signal if the signal handler did not raise an exception (see PEP 475 for the rationale), instead of returning an empty list of events before the timeout.
close():Close the selector.
它必须被调用,以此确保底层资源的释放。在selector关闭后不能再次使用。
get_key(fileobj)
Return the key associated with a registered file object.
This returns the SelectorKey instance associated to this file object, or raises KeyError if the file object is not registered.
abstractmethod get_map()
Return a mapping of file objects to selector keys.
This returns a Mapping instance mapping registered file objects to their associated SelectorKey instance.
class selectors.DefaultSelector
这是最常用的类。它可以自动选择当前平台下最高效的选择器。
如无必要,优先使用它。
下面还有其它类,但对一般用户而言很少使用。
class selectors.SelectSelector
select.select()-based selector.
class selectors.PollSelector
select.poll()-based selector.
class selectors.EpollSelector
select.epoll()-based selector.
class selectors.DevpollSelector
select.devpoll()-based selector.
fileno()
This returns the file descriptor used by the underlying select.devpoll() object.
New in version 3.5.
class selectors.KqueueSelector
select.kqueue()-based selector.
fileno()
This returns the file descriptor used by the underlying select.kqueue() object.
select()返回(key, events)列表;
key表示就绪对象,events表示事件掩码。
原文:https://www.cnblogs.com/wodeboke-y/p/12884550.html