首页 > 编程语言 > 详细

# python lib - selectors

时间:2020-05-13 20:32:26      阅读:47      评论:0      收藏:0      [点我收藏+]

selectors


1. 简介

doc:python-3.7.7-docs-html/library/selectors.html
它定义了一个抽象类BaseSelector,以及几个具体实现类。
在本文中, 文件对象指的是任何具有fileno()方法的对象或者文件描述符;

DefaultSelector:一般使用此类,它会自动选择当前环境中最有效的Selector。

类的等级:
BaseSelector

  • SelectSelector
  • PollSelector
  • EpollSelector
  • DevpollSelector
  • KqueueSelector

下文中,事件events是一个位掩码,用于说明文件对象的哪些事件被监听。

EVENT_READ:可读
EVENT_WRITE:可写

1.1. 类说明

1.1.1. class selectors.SelectorKey

一般用这个类的实例描述一个已注册文件对象的状态。

常用属性:
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.

1.1.2. class selectors.BaseSelector

等待多个fd的事件就绪。
支持文件流注册/取消。
它是抽象基类,因此无法实例化。
它支持上下文管理。

常用方法

  1. abstractmethod register(fileobj, events, data=None)
    注册一个文件对象以监听其事件。
    fileobj是要监听的文件对象。它可以是整数(文件描述符)或有fileno()方法的对象。
    它返回一个SelectorKey实例,或raises a ValueError,或KeyError。

  2. abstractmethod unregister(fileobj)
    从selection解除注册,从监听中移除。应该在关闭前注销。
    fileobj必须是已注册的文件对象。
    它返回关联的SelectorKey实例。或者抛出异常 KeyError(文件对象未注册)/ValueError(文件对象非法)。

  3. modify(fileobj, events, data=None)
    修改已注册文件对象的监听事件或数据。
    相当于先调用BaseSelector.unregister(fileobj)()再调用BaseSelector.register(fileobj, events, data)(), 但它更高效。
    它返回SelectorKey实例,或者抛出异常,具体内容同注册部分。

  4. 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.

  5. close():Close the selector.
    它必须被调用,以此确保底层资源的释放。在selector关闭后不能再次使用。

  6. 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.

  7. 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.

1.1.3. 其它灰

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.

2. 总结

select()返回(key, events)列表;
key表示就绪对象,events表示事件掩码。

# python lib - selectors

原文:https://www.cnblogs.com/wodeboke-y/p/12884550.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!