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

78 篇文章 1 订阅
78 篇文章 0 订阅

源码: 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()对象使用的文件描述符。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值