selectors的简单使用

用selectors实现并发

 1 import selectors
 2 import socket
 3 
 4 def accept(sk, mash):
 5     # 获取另一个连接对象
 6     conn, addr = sk.accept()
 7     conn.setblocking(False)
 8     sel.register(conn, selectors.EVENT_READ, read)
 9 
10 def read(conn, mash):
11     # 收发消息
12     # 几乎所有的逻辑操作都在这个函数中实现
13     try:
14         data = conn.recv(1024)
15         if not data: return
16         conn.send(b"hello world")
17     except Exception as e:
18         print(e)
19         sel.unregister(conn)
20         conn.close()
21 
22 if __name__ == '__main__':
23     # 获取selectors对象
24     sel = selectors.DefaultSelector()
25     
26     # 获取socket对象
27     sk = socket.socket()
28     sk.bind((socket.gethostname(), 8080))
29     sk.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
30     sk.listen(10)
31     # 将sk设为非阻塞的
32     sk.setblocking(False)
33     
34     # 注册sk使其与accept绑定
35     sel.register(sk, selectors.EVENT_READ, accept)
36     
37     while True:
38         # 监听,超时时间设为0.2秒
39         events = sel.select(0.2)
40         for key, mash in events:
41             callback = key.data
42             # 触发对应的事件
43             callback(key.fileobj, mash)
44         # for循环之后为超时时间内可操作的语句

 

posted @ 2020-06-21 12:14  _御林君  阅读(404)  评论(0)    收藏  举报