python3从零学习-5.8.3、selectors—高级 I/O 复用库

源码: Lib/selectors.py

 


概述

这个模块允许高级和高效的I/O多路复用,建立在选择模块原语之上。鼓励用户使用此模块,除非他们希望对所使用的os级原语进行精确控制。

 

它定义了一个BaseSelector抽象基类,以及几个具体的实现(KqueueSelector,EpollSelector…),可以用于在多个文件对象上等待I/O就绪通知。在下文“文件对象”指任何具有fileno()方法或原始文件描述符的对象。

 

DefaultSelector是当前平台上可用的最有效实现的别名:这应该是大多数用户的默认选择。

 

类层次结构:


 
BaseSelector 
    +-- SelectSelector 
    +-- PollSelector 
    +-- EpollSelector 
    +-- DevpollSelector 
    +-- KqueueSelector

events是一个位掩码,指示在给定文件对象上应该等待哪些I/O事件。它可以是下列模块常量的组合:

常数                  含义 
EVENT_READ           可读 
EVENT_WRITE          可写

 

class selectors.SelectorKey
    SelectorKey是一个命名元组,用于将文件对象关联到其基础文件描述符、选定的事件掩码和附加数据。它由几个BaseSelector方法返回。


    fileobj
        注册的文件对象。


    fd
        文件描述符。


    events
        在此文件对象上等待的事件。


    data
        与此文件对象关联的可选不透明数据。

class selectors.BaseSelector
    BaseSelector用于等待多个文件对象上的I/O事件准备就绪。它支持文件流注册、取消注册,以及等待这些流上的I/O事件的方法(带有可选的超时)。它是一个抽象基类,因此不能实例化。
    如果你想使用一个实现,并且你的平台支持它,可以使用DefaultSelector,或者SelectSelector, KqueueSelector等等。BaseSelector及其具体实现支持上下文管理器协议。


    abstractmethod register(fileobj, events, data=None)
        注册一个文件对象进行选择,监视它的I/O事件。


        fileobj是要监视的文件对象。它可以是一个整数文件描述符,也可以是一个具有fileno()方法的对象。事件是要监视的事件的位掩码。数据是一个不透明的对象。


        这会返回一个新的SelectorKey实例,或者在事件掩码或文件描述符无效的情况下引发一个ValueError,或者在文件对象已经注册的情况下引发一个KeyError。


    abstractmethod unregister(fileobj)
        取消注册的文件对象,从监视中删除它。一个文件对象在被关闭之前应该被取消注册。


        fileobj必须是先前注册的文件对象。


        这会返回相关的SelectorKey实例,或者在fileobj未注册时引发一个键错误。如果fileobj无效(例如它没有fileno()方法,或者它的fileno()方法有一个无效的返回值),它将引发ValueError。


    modify(fileobj, events, data=None)
        更改已注册文件对象的监视事件或附加数据。


        这相当于BaseSelector.unregister(fileobj)()后面跟着BaseSelector。寄存器(fileobj,事件,数据)(),除了它可以更有效地实现。


        这将返回一个新的SelectorKey实例,或者在事件掩码或文件描述符无效的情况下引发一个ValueError,或者在文件对象未注册的情况下引发一个KeyError。


    abstractmethod select(timeout=None)
        等待,直到已注册的文件对象就绪,或者超时过期。


        如果超时>为0,则指定最大等待时间,以秒为单位。如果timeout <= 0,调用将不会阻塞,并将报告当前准备好的文件对象。如果timeout为None,调用将阻塞,直到被监视的文件对象就绪。


        这将返回一个元组(键、事件)列表,每个元组对应一个就绪文件对象。


        key是SelectorKey实例,对应于一个就绪文件对象。events是这个文件对象上准备好的事件的位掩码。


    close()
        关闭选择器。必须调用它以确保释放所有底层资源。选择器一旦关闭,就不能使用。


    get_key(fileobj)
        返回与注册文件对象关联的键。


        这将返回与此文件对象关联的SelectorKey实例,或者在文件对象未注册时引发KeyError。


    abstractmethod get_map()
        返回文件对象到选择器键的映射。


        这将返回一个映射实例,将注册的文件对象映射到它们关联的SelectorKey实例。

 

class selectors.DefaultSelector
    默认选择器类,使用当前平台上可用的最有效实现。这应该是大多数用户的默认选择。

class selectors.SelectSelector
    select.select()-based selector.

class selectors.PollSelector
    select.poll()-based selector.

class selectors.EpollSelector
    select.epoll()-based selector.

    fileno()
        这将返回基础select.epoll()对象使用的文件描述符。

class selectors.DevpollSelector
    select.devpoll()-based selector.

    fileno()
        这将返回基础select.devpoll()对象使用的文件描述符。

class selectors.KqueueSelector
    select.kqueue()-based selector.

    fileno()
        这将返回底层select.kqueue()对象使用的文件描述符。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章