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

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