码迷,mamicode.com
首页 > 其他好文 > 详细

IO多路复用之select

时间:2020-02-27 14:37:26      阅读:82      评论:0      收藏:0      [点我收藏+]

标签:locking   print   writable   sock   send   form   else   nbsp   bind   

 1 import socket,select,queue
 2 
 3 server = socket.socket()
 4 server.bind((‘127.0.0.1‘,9000))
 5 server.listen(1000)
 6 server.setblocking(0)
 7 
 8 inputs = [server]
 9 outputs = []
10 que_dic = {}
11 
12 
13 
14 while True:
15     readable, writable, E = select.select(inputs, outputs, inputs)
16     try:
17         for r in readable:
18             if r is server:
19                 conn,addr = r.accept()
20                 print(‘----{}----‘.format(addr))
21                 inputs.append(conn)
22                 que_conn = queue.Queue()
23                 que_dic[conn] = que_conn
24             else:
25                 data = r.recv(1024)
26                 print(‘收到>>>‘,data.decode(‘utf8‘))
27                 que_dic[r].put(data)
28                 outputs.append(r)
29         for w in writable:
30             data = que_dic[w].get()
31             w.sendall(data)
32             outputs.remove(w)
33     except Exception:
34         for e in E:
35             del que_dic[e]
36             if e in outputs:outputs.remove(e)
37             print(inputs)
38             inputs.remove(e)
39             print(inputs)

client 端

1 import socket,select,queue
2 
3 client =  socket.socket()
4 client.connect((‘127.0.0.1‘,8000))
5 while True:
6     msg = input(‘>>>:‘)
7     client.sendall(msg.encode(‘utf8‘))
8     data = client.recv(1024)
9     print(‘收到返回信息:‘,data.decode(‘utf8‘))

 

IO多路复用之select

标签:locking   print   writable   sock   send   form   else   nbsp   bind   

原文地址:https://www.cnblogs.com/fly10086/p/12372009.html

踩
(0)
赞
(0)
   
举报
评论 一句话评论(0)
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!