Python select模組學習

來源:互聯網
上載者:User

標籤:

  select 是常用的非同步socket 處理方法

  一般用法:

    # iwtd,owtd,ewtd 分別為需要非同步處理的讀socket隊列, 寫socket隊列(一般不用), 和錯誤socket隊列, 返回事件的讀寫和錯誤socket隊列

il,ol,el = select(iwtd,owtd,ewtd[,timeout])for sock in il:    #read the sockfor sock in ol:    #...for sock in el:    #handle errors

  select 和 poll 都是比較低級的函數, 用起來比較麻煩, 如果使用非同步socket編程,可以使用twisted

  1.模組的功能主要是等待I/O完成, 提供在大多數作業系統上對select() 和 poll()函數的調用, 在Linux 2.5+上可以調用epoll(),在BSD上可以調用kqueue() , 在Windows上, 模組只能工作在socket上, 在其他動作系統上, 它還可以工作在其他檔案類型上(如在Unix上, 可以工作在pipes上).它不能被用來判斷一個普通檔案在最後一次讀操作之後是否有grown.

  模組定義了:

    exception:

      select.error(): 當錯誤發生時拋出,  會像C函數的perror()一樣列印錯誤編號和描述字串

    functions:

      select.epoll([sizehint=-1]): 返回一個edge polling 對象, 可以用來作為Edge or Level Triggered interface for I/O  events.

      select.poll(): 不是在所有系統上都支援, 返回一個polling 對象, 可以用來支援registering and unregistering file descriptors, 然後polling them for I/O events.

      select.kqueue(): 只支援BSD, 返回一個kernel queue object.

      select.kevent(ident,filter=KQ_FILTER_READ,flags=KQ_EV_ADD,fflags=0,data=0,udata=0): 只支援BSD,返回一個kernel queue object.

      select.select(rlist,wlist,xlist[,timeout]): 這是一個straightforward interface to Unix select()系統調用, 前3個參數是一串可等待對象, 表示代表檔案描述符的整數或者帶有一個名為fileno()的無參方法返回的同樣的整數;

        參數:  1.rlist: 等待直到讀準備好; 2.wlist: 等待直到寫操作準備好; 3.xlist: 等待一個"exceptional condition" ;      允許空序列, 但是如果3個參數都為空白的列表的話, 在Unix上可以, 但在Windows上不行, 與平台相關 . 當timeout參數被設定之後, 函數將blocks 知道至少一個檔案描述符 is ready, 值為0 表示 a poll and never block.

        傳回值: triple of list of object that are ready. subsets of the first three arguments. 當time-out reached, 但還沒有file descriptor ready, 返回 three empty lists.

        Among the acceptable object types in the sequence are python file object, like sys.stdin or objects returned by open() or os.popen()(這個命令可以用來執行系統調用, 相當於os.system(), 用法: os.popen("ping 192.168.1.1")) .

    Constant:

      select.PIPE_BUF: ...

 

  2. Edge and Level Trigger Polling(epoll) Object

    

  epoll.close() : close the control file descriptor of the epoll object.  

  epoll.fileno(): return the file descriptor number of the control fd

  epoll.fromfd(fd): create an epoll object from a given file descriptor

  epoll.register(fd[,eventmask]) : register a fd descriptor with the epoll object.

  更多資訊參考: https://docs.python.org/2.7/library/select.html?highlight=select#module-select

  

       

 

Python select模組學習

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.