博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Day15 - Python基础15 模块学习-selectors
阅读量:6679 次
发布时间:2019-06-25

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

本节内容

1:Python/selectors模块

2:selsect实例

1:Python/selectors模块及队列

 selectors模块是可以实现IO多路复用机制:

它具有根据平台选出最佳的IO多路机制,比如在win的系统上他默认的是select模式而在linux上它默认的epoll。

常用IO多路复用共分为三种: select、poll、epoll且windows上只支持select,而linux上都支持

select的缺点:

1、每次调用都要将所有的文件描述符(fd)拷贝的内核空间,导致效率下降

2、遍历所有的文件描述符(fd)查看是否有数据访问

3、最大链接数限额(1024)

poll:

它就是select和epoll的过渡阶段,它没有最大链接数的限额

epoll:

1、第一个函数是创建一个epoll句柄,将所有的描述符(fd)拷贝到内核空间,但只拷贝一次。

2、回调函数,某一个函数或某一个动作成功完成之后会触发的函数为所有的描述符(fd)绑定一个回调函数,一旦有数据访问就是触发该回调函数,回调函数将(fd)放到链表中

3、函数判断链表是否为空

4、最大启动项没有限额

2:selsect实例:

1 ###服务端################ 2  3 import selectors  #基于select模块实现的IO多路复用,建议大家使用 4 import socket 5 sock=socket.socket() 6 sock.bind(('127.0.0.1',8800)) 7 sock.listen(5) 8 sock.setblocking(False) 9 sel=selectors.DefaultSelector() #根据平台选择最佳的IO多路机制,比如linux就会选择epoll10 11 def read(conn,mask):12     try:13         data=conn.recv(1024)14         print(data.decode('utf8'))15         data2=input('>>>>')16         conn.send(data2.encode('utf8'))17     except Exception:18         sel.unregister(conn)19 20 def accept(sock,mask):21     conn,addr=sock.accept()22     print('-------',conn)23     sel.register(conn,selectors.EVENT_READ,read)24 25 sel.register(sock, selectors.EVENT_READ, accept)  #注册功能,一旦有反应继续往下执行26 27 while True:28     print('wating....')29     events=sel.select()   #event和select的监听对象[(sock),(),()]一样,都是在监听30 31     for key,mask in events:32         # print(key.data)       #accept   找出有活动的绑定函数33         # print(key.fileobj)    #sock     找出有活动的文件描述符34 35         func=key.data36         obj=key.fileobj37 38         func(obj,mask)  #1 accept(sock,mask) 2read(conn,mask)39 40 ##客户端#################41 import socket42 tin=socket.socket()43 tin.connect(('127.0.0.1',8800))44 while True:45     inp=input('>>>>')46     tin.send(inp.encode('utf8'))47     data=tin.recv(1024)48     print(data.decode('utf8'))

 

 

转载于:https://www.cnblogs.com/hero799/p/8642133.html

你可能感兴趣的文章
解析el表达式出错
查看>>
vmware实现nat上网
查看>>
Linux一键安装Aria2+Yaaw+FileManager实现BT磁力下载,并在线查看/观看
查看>>
unity3d zegui 按钮图标更换 不成功
查看>>
安装wxPHP后,apache无法启动
查看>>
android判断是否连接网络
查看>>
sqlite 打开数据库
查看>>
Thrift使用教程(Java版本)
查看>>
我的友情链接
查看>>
通过SSH证书实现Putty免密码登录CentOS
查看>>
Java IO类库之Bits
查看>>
ERROR 1217 (23000): Cannot delete or update a pare
查看>>
oracle 11g RAC搭建 ASM存储
查看>>
函数学习-bytearray()
查看>>
CentOS7安装配置telnet-server
查看>>
GitOSC和GitHub上传项目
查看>>
[PYTHON] 核心编程笔记(12.Python模块)
查看>>
windows下MD5-SHA1校验
查看>>
Linux学习记录-2015-08-20--常用命令1
查看>>
Android工程引用另外一个工程的正确/错误方法
查看>>