python三十三节_python学习第三十三节(IO模型)

windows由于新建进程会从新赋值一份内存空间,将本页重新加载一遍,if下面这些内容不能重新加载,否则就再次创建进程了,所以需要if__name__=='__main__'

阻塞 IO,即读写数据时,需要等待操作完成,才能继续执行。进阶的做法就是用多线程来处理需要 IO 的部分,缺点是开销会有些大。

非阻塞 IO,即读写数据时,如果暂时不可读写,则立刻返回,而不等待。因为不知道什么时候是可读写的,所以轮询时可能会浪费 CPU 时间。

IO多路复用:

select 监听机制通过轮训,看是否有变化,将有变化的提出来。

poll

epoll 推荐

import selectors, socket

sel = selectors.DefaultSelector()#实例化一个对象

sock = socket.socket()#创建一个socket对象

sock.bind(("0.0.0.0", 9997))

sock.listen(5)

sock.setblocking(False)#非阻塞IO

def read(conn, mask):#创建一个函数read,传进参数conn

data = conn.recv(1024)

print(data.decode("utf8"))

resp = input(">>>>>")

conn.send(resp.encode("utf8"))

def accept(sock, mask):

conn, addr = sock.accept()#将接受到的accept赋值

sel.register(conn, selectors.EVENT_READ, read)

#注册conn,一旦客户端发来消息内容将触发函数read

# 绑定套接字对象和函数

sel.register(sock, selectors.EVENT_READ, accept)

#注册sock,如果有新链接将会触发,执行绑定函数accept

while 1:

events = sel.select() # 监听触发的内容,如果是sock,将列表所以赋值给events

for key, mask in events:#循环遍历这个列表(列表一共两个内容,0是个对象,1是mask)

callback = key.data

#取出对象的data方法,如果是sock对象方法就是注册时候的accept,如果是conn就是read

callback(key.fileobj, mask)

#执行这个方法,并传参数conn进去

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值