Day15 - Python基礎15 模組學習-selectors

來源:互聯網
上載者:User

標籤:register   lin   啟動   判斷   檔案   sele   code   exception   sock   

本節內容

1:Python/selectors模組

2:selsect執行個體

1:Python/selectors模組及隊列

 selectors模組是可以實現IO多工機制:

它具有根據平台選出最佳的IO多路機制,比如在win的系統上他預設的是select模式而在linux上它預設的epoll。

常用IO多工共分為三種: select、poll、epoll且windows上只支援select,而linux上都支援

select的缺點:

1、每次調用都要將所有的檔案描述符(fd)拷貝的核心空間,導致效率下降

2、遍曆所有的檔案描述符(fd)查看是否有資料訪問

3、最大連結數限額(1024)

poll:

它就是select和epoll的過渡階段,它沒有最大連結數的限額

epoll:

1、第一個函數是建立一個epoll控制代碼,將所有的描述符(fd)拷貝到核心空間,但只拷貝一次。

2、回呼函數,某一個函數或某一個動作成功完成之後會觸發的函數為所有的描述符(fd)綁定一個回呼函數,一旦有資料訪問就是觸發該回呼函數,回呼函數將(fd)放到鏈表中

3、函數判斷鏈表是否為空白

4、最大啟動項沒有限額

2:selsect執行個體:
 1 ###服務端################ 2  3 import selectors  #基於select模組實現的IO多工,建議大家使用 4 import socket 5 sock=socket.socket() 6 sock.bind((‘127.0.0.1‘,8800)) 7 sock.listen(5) 8 sock.setblocking(False) 9 sel=selectors.DefaultSelector() #根據平台選擇最佳的IO多路機制,比如linux就會選擇epoll10 11 def read(conn,mask):12     try:13         data=conn.recv(1024)14         print(data.decode(‘utf8‘))15         data2=input(‘>>>>‘)16         conn.send(data2.encode(‘utf8‘))17     except Exception:18         sel.unregister(conn)19 20 def accept(sock,mask):21     conn,addr=sock.accept()22     print(‘-------‘,conn)23     sel.register(conn,selectors.EVENT_READ,read)24 25 sel.register(sock, selectors.EVENT_READ, accept)  #註冊功能,一旦有反應繼續往下執行26 27 while True:28     print(‘wating....‘)29     events=sel.select()   #event和select的監聽對象[(sock),(),()]一樣,都是在監聽30 31     for key,mask in events:32         # print(key.data)       #accept   找出有活動的綁定函數33         # print(key.fileobj)    #sock     找出有活動的檔案描述符34 35         func=key.data36         obj=key.fileobj37 38         func(obj,mask)  #1 accept(sock,mask) 2read(conn,mask)39 40 ##用戶端#################41 import socket42 tin=socket.socket()43 tin.connect((‘127.0.0.1‘,8800))44 while True:45     inp=input(‘>>>>‘)46     tin.send(inp.encode(‘utf8‘))47     data=tin.recv(1024)48     print(data.decode(‘utf8‘))

 

 

Day15 - Python基礎15 模組學習-selectors

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.