selor模块

 1 import selectors, socket
 2 
 3 sel = selectors.DefaultSelector()
 4 
 5 
 6 def accept(sock, mask):
 7     coon, addr = sock.accept()
 8     print('accepted', coon, 'from', addr)
 9     coon.setblocking(False)
10     sel.register(coon, selectors.EVENT_READ, read)
11 
12 
13 def read(coon, mask):
14     try:
15         data = coon.recv(1000)
16         if data:
17             print('echoing', repr(data), 'to', coon)
18             coon.sendall(data)
19         else:
20             raise Exception
21     except:
22         print('closing', coon)
23         sel.unregister(coon)
24         coon.close()
25 
26 
27 sock = socket.socket()
28 sock.bind(('127.0.0.1', 8090))
29 sock.listen(100)
30 sock.setblocking(False)
31 sel.register(sock, selectors.EVENT_READ, accept)  # 注册一个对象,和触发该对象后要执行的函数。
32 print('server..............')
33 while True:
34 
35     events = sel.select()
36     for key, mask in events:
37         callback = key.data
38         callback(key.fileobj, mask)  # key.fileobj是响应的那个对象,比如是socket

客户端

 1 import socket
 2 
 3 client_socket = socket.socket()
 4 
 5 client_socket.connect(('127.0.0.1',8090))
 6 while True:
 7     a = input('....')
 8 
 9     client_socket.sendall(a.encode())
10     data = client_socket.recv(1024)
11     print(data.decode())

阻塞IO      非阻塞IO     IO多路复用    

posted @ 2020-05-02 21:34  竹石2020  阅读(182)  评论(0编辑  收藏  举报