PYTHON 实现IO多路复用的方法

方法1: select(rlist,wlist,xlist)方法(用的多)

特点
优点:跨平台性好(win linux unix)
缺点:效率一般(每次监控IO都需要将应用层关注的IO映射给内核处理,应用层处理就绪IO时需要再次轮寻),最多监控1024个IO

流程

  1. 将关注的IO放入对应的监控类别列表
  2. 通过select函数进行监控
  3. 遍历select返回值列表,确定就绪IO事件
  4. 处理发生的IO事件

代码

from socket import *
from select import select	#python用select模块实现io多路复用

#创建监听套接字作为IO对象(读类型)
s = socket()
s.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)	#设置端口可以复用
s.bind(('0.0.0.0',8888))
s.listen(3)

#设置关注列表
rlist = [s]	#监听套接字:s 只有读操作,等待客户端连接
wlist = []
xlist = []

#循环监听不同客户端发过来的请求,使s监听套接字一直处于r[0]就绪状态
while True:
	#监控IO发生
	#select函数语法:rs,ws,ws=select(rlist,wlist,xlist[,timeout])
	rs,ws,xs = select(rlist,wlist,xlist)	#监控新发过来的s监听套接字和c连接套接字,返回他们的就绪状态
	for r in rs:
		if r is s:			#分情况讨论,如果是监听套接字,说明由客户端连接服务端,做以下事情(只能读)
			#接收连接
			c,addr = r.accept()	#rs[0]表示准备就绪了的s监听套接字,c的本质是客户端给服务端发消息
			print('Connect from',addr)
			rlist.append(c)		#将新生成的c套接字添加到读监听列表rlist中,让操作系统去监控
		else:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值