博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python学习第三十三节(IO模型)
阅读量:4839 次
发布时间:2019-06-11

本文共 1175 字,大约阅读时间需要 3 分钟。

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

 

 

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

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

 

 

 

 

IO多路复用:

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

epoll 推荐

import selectors, socketsel = selectors.DefaultSelector()#实例化一个对象sock = socket.socket()#创建一个socket对象sock.bind(("0.0.0.0", 9997))sock.listen(5)sock.setblocking(False)#非阻塞IOdef 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,如果有新链接将会触发,执行绑定函数acceptwhile 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进去

  

 

转载于:https://www.cnblogs.com/ArmoredTitan/p/7250623.html

你可能感兴趣的文章
back to back
查看>>
Linux/Unix笔记本
查看>>
博弈问题之SG函数博弈小结
查看>>
数组排序 --- 庞果
查看>>
Cocos2d-x 处理双击事件的两种方法
查看>>
热键循环切换当前窗口为1/4、1/3、2/3屏幕大小
查看>>
用户权限管理
查看>>
30天敏捷生活(12): 整理你的空间
查看>>
纯虚函数
查看>>
Django与前端的交互
查看>>
线程安全总结
查看>>
Java获取正在执行的函数名
查看>>
vue 运行npm run dev报错
查看>>
HDU 1233 还是畅通工程
查看>>
HTTP状态码
查看>>
ArcEngine实现坐标转换和投影(转载)
查看>>
solr集群SolrCloud(solr+zookeeper)windows搭建
查看>>
LightOJ 1370 Bi-shoe and Phi-shoe(欧拉函数)
查看>>
51nod 1351 吃点心(贪心)
查看>>
Vim配置(python版)
查看>>