python selectors 模組應用

來源:互聯網
上載者:User

標籤:selectors   append   add   als   localhost   一個   調用   pre   obj   

模組使用樣本1
import selectorsimport socketsel = selectors.DefaultSelector()def accept(sock, mask):    conn, addr = sock.accept()  # Should be ready  建立串連    print(‘accepted‘, conn, ‘from‘, addr)    conn.setblocking(False)    sel.register(conn, selectors.EVENT_READ, read)#註冊到時間迴圈列表(不立刻收,用戶端可能還沒有發。)如果再有活動就調用read函數def read(conn, mask):    data = conn.recv(1000)  # Should be ready    if data:        print(‘echoing‘, repr(data), ‘to‘, conn)        conn.send(data)  # Hope it won‘t block    else:        print(‘closing‘, conn)        sel.unregister(conn)        conn.close()sock = socket.socket()sock.bind((‘localhost‘, 1234))sock.listen(100)sock.setblocking(False)sel.register(sock, selectors.EVENT_READ, accept)#先註冊server對象。調用acceptwhile True:    events = sel.select() #預設阻塞,有活動連結就返回活動列表    for key, mask in events:        callback = key.data        callback(key.fileobj, mask)

使用樣本2

#服務端from socket import *import selectorssel=selectors.DefaultSelector()def accept(server_fileobj,mask):    conn,addr=server_fileobj.accept()    sel.register(conn,selectors.EVENT_READ,read)def read(conn,mask):    try:        data=conn.recv(1024)        if not data:            print(‘closing‘,conn)            sel.unregister(conn)            conn.close()            return        conn.send(data.upper()+b‘_SB‘)    except Exception:        print(‘closing‘, conn)        sel.unregister(conn)        conn.close()server_fileobj=socket(AF_INET,SOCK_STREAM)server_fileobj.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)server_fileobj.bind((‘127.0.0.1‘,8088))server_fileobj.listen(5)server_fileobj.setblocking(False) #設定socket的介面為非阻塞sel.register(server_fileobj,selectors.EVENT_READ,accept) #相當於網select的讀列表裡append了一個檔案控制代碼server_fileobj,並且綁定了一個回呼函數acceptwhile True:    events=sel.select() #檢測所有的fileobj,是否有完成wait data的    for sel_obj,mask in events:        callback=sel_obj.data #callback=accpet        callback(sel_obj.fileobj,mask) #accpet(server_fileobj,1)#用戶端from socket import *c=socket(AF_INET,SOCK_STREAM)c.connect((‘127.0.0.1‘,8088))while True:    msg=input(‘>>: ‘)    if not msg:continue    c.send(msg.encode(‘utf-8‘))    data=c.recv(1024)    print(data.decode(‘utf-8‘))

 

python 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.