python中的selectors模塊


   它的功能與linux的epoll,還是select模塊,poll等類似;實現高效的I/O multiplexing,  常用於非阻塞的socket的編程中; 簡單介紹一下這個模塊,更多內容查看 python文檔:https://docs.python.org/3/library/selectors.html

 

1. 模塊定義了一個 BaseSelector的抽象基類, 以及它的子類,包括:SelectSelector, PollSelector, EpollSelector, DevpollSelector, KqueueSelector.    

另外還有一個DefaultSelector類,它其實是以上其中一個子類的別名而已,它自動選擇為當前環境中最有效的Selector,所以平時用 DefaultSelector類就可以了,其它用不着。

 

2. 模塊定義了兩個常量,用於描述 event Mask

EVENT_READ :      表示可讀的; 它的值其實是1;

EVENT_WRITE:      表示可寫的; 它的值其實是2;

 

3. 模塊定義了一個 SelectorKey類, 一般用這個類的實例 來描述一個已經注冊的文件對象的狀態, 這個類的幾個屬性常用到:

fileobj:   表示已經注冊的文件對象;

fd:          表示文件對象的描述符,是一個整數,它是文件對象的 fileno()方法的返回值;

events:    表示注冊一個文件對象時,我們等待的events, 即上面的event Mask, 是可讀呢還是可寫呢!!

data:       表示注冊一個文件對象是邦定的data;

 

 

4. 最后說說抽象基類中的方法;

register(fileobj, events, data=None)      作用:注冊一個文件對象。

                                                      參數: fileobj——即可以是fd 也可以是一個擁有fileno()方法的對象; 

                                                              events——上面的event Mask 常量; data

                                                     返回值: 一個SelectorKey類的實例;

 

unregister(fileobj)                              作用: 注銷一個已經注冊過的文件對象;      

                                                     返回值:一個SelectorKey類的實例;

 

modify(fileobj, events, data=None)    作用:用於修改一個注冊過的文件對象,比如從監聽可讀變為監聽可寫;它其實就是register() 后再跟unregister(),       但是使用modify( ) 更高效;

                                                  返回值:一個SelectorKey類的實例;

 

 

select(timeout=None)                    作用: 用於選擇滿足我們監聽的event的文件對象;

                                                 返回值: 是一個(key, events)的元組, 其中key是一個SelectorKey類的實例, 而events 就是 event Mask(EVENT_READ或EVENT_WRITE,或者二者的組合)

 

close()                                     作用:關閉 selector。 最后一定要記得調用它, 要確保所有的資源被釋放;

 

get_key(fileobj)                          作用: 返回注冊文件對象的 key;

                                               返回值 :一個SelectorKey類的實例;

 

Ok,就這樣吧!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM