标签:
这里的IO是指网络IO
python中通过select模块实现IO多路复用,select模块中有select、poll、epoll等方法
下面例子以select模块实现IO多路复用
仅仅只有IO多路复用只能实现伪并发
服务器端
#!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = ‘zhoufeng‘ import socket import select sk=socket.socket() sk.bind((‘127.0.0.1‘,9999,)) sk.listen(5) inputs=[sk,] #监听的对象 while True: # rlist中元素是socket对象 # 监听sk(服务器端)对象,如果sk对象发生变化,表示有客户端来连接了,此时rlist值为[sk] # 监听conn对象,如果conn发生变化,表示客户端有新消息发送过来了,此时rlist的值为 [客户端] rlist,w,e=select.select(inputs,[],[],1) #print(rlist) print(len(inputs),len(rlist)) for r in rlist: #如果rlist列表为空,此for循环不会执行 if r==sk: #表示有新的客户端来连接 #print(r) conn,addr=r.accept() #为新的客户端创建conn对象 inputs.append(conn) #将新的conn对象放到inputs中 conn.sendall(bytes(‘hello‘,encoding=‘utf-8‘)) else: r.recv(1024) #表示客户端发送了数据
客户端
#!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = ‘zhoufeng‘ import socket import select sk=socket.socket() sk.connect((‘127.0.0.1‘,9999,)) data=sk.recv(1024) print(data) while True: inp=input(‘>>>‘) sk.sendall(bytes(inp,encoding=‘utf-8‘)) sk.close()
标签:
原文地址:http://www.cnblogs.com/zhoufeng1989/p/5699378.html