Python——IO多路复用之select模块poll方法
Python——IO多路复用之select模块poll方法
使用poll方法实现IO多路复用
.
├── poll_client.py
├── poll_server.py
└── settings.py
# settings.py HOST = 'localhost'
PORT = 5555
buffersize = 1024
ADDR = HOST, PORT
# poll_server.py from settings import *
from select import *
from socket import * s = socket()
s.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1) # 设置端口可立即重用
s.bind(ADDR)
s.listen() # 创建poll对象
p = poll() # 创建地图(字典)
fdmap = {s.fileno(): s} # 注册关注(事件)
p.register(s, POLLIN | POLLERR)
# POLLIN 对应select方法中的参数rlist -> 等待处理的IO事件
# POLLOUT 对应select方法中的参数wlist -> 主动处理的IO事件
# POLLERR 对应select方法中的参数xlist -> 出错处理的IO事件 while True:
# 进行IO监控
# events = [(fileno, event), ...]
try:
events = p.poll()
except KeyboardInterrupt:
print('KeyboardInterrupt: Ctrl+C to exit')
break for fd, event in events:
if fd == s.fileno():
# 从地图中找到fd对应的对象
conn, addr = fdmap[fd].accept()
print('Connect from', addr)
# 注册关注
p.register(conn, POLLIN)
# 添加到地图中
fdmap[conn.fileno()] = conn
else:
data = fdmap[fd].recv(buffersize)
if not data:
p.unregister(fd) # 取消注册
fdmap[fd].close() # 关闭套接字
del fdmap[fd] # 从地图中删除
else:
print(fdmap[fd].getpeername(), data.decode())
fdmap[fd].send(b'Roger that!')
s.close()
print('El Fin')
# client.py from socket import *
from settings import * s = socket()
s.connect(ADDR) while True:
data = input('>> ')
if not data:
break
s.send(data.encode())
print(s.recv(buffersize).decode()) s.close()
Python——IO多路复用之select模块poll方法的更多相关文章
- Python——IO多路复用之select模块epoll方法
Python——IO多路复用之select模块epoll方法 使用epoll方法实现IO多路复用,使用方法基本与poll方法一致,epoll效率要高于select和poll. .├── epoll_c ...
- Python——IO多路复用之select模块select方法
Python——IO多路复用之select模块select方法 使用select模块的select方法实现Python——IO多路复用 实现同时将终端输入的文本以及客户端传输的文本写入文本文件中: w ...
- 【python】-- IO多路复用(select、poll、epoll)介绍及实现
IO多路复用(select.poll.epoll)介绍及select.epoll的实现 IO多路复用中包括 select.pool.epoll,这些都属于同步,还不属于异步 一.IO多路复用介绍 1. ...
- IO多路复用(select、poll、epoll)介绍及select、epoll的实现
IO多路复用(select.poll.epoll)介绍及select.epoll的实现 IO多路复用中包括 select.pool.epoll,这些都属于同步,还不属于异步 一.IO多路复用介绍 1. ...
- 网络通信 --> IO多路复用之select、poll、epoll详解
IO多路复用之select.poll.epoll详解 目前支持I/O多路复用的系统调用有 select,pselect,poll,epoll,I/O多路复用就是通过一种机制,一个进程可以监视 ...
- IO多路复用之select、poll、epoll
本文转载自IO多路复用之select.poll.epoll 导语 IO多路复用:通过一种机制,一个进程可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作. ...
- 以python理解Linux的IO多路复用,select、poll、epoll
题外话 之前在看Unix环境高级编程的时候,看完高级IO那一章,感觉自己萌萌哒,0.0 ,有点囫囵吞枣的感觉,之后翻了几篇博客,从纯系统的角度理解,稍微有了点概念,以这两篇为例,可以以后参考: htt ...
- 聊聊IO多路复用之select、poll、epoll详解
本文转载自: http://mp.weixin.qq.com/s?__biz=MzAxODI5ODMwOA==&mid=2666538922&idx=1&sn=e6b436ef ...
- IO多路复用之select,poll,epoll个人理解
在看这三个东西之前,先从宏观的角度去看一下,他们的上一个范畴(阻塞IO和非阻塞IO和IO多路复用) 阻塞IO:套接口阻塞(connect的过程是阻塞的).套接口都是阻塞的. 应用程序进程-----re ...
随机推荐
- Unity Shader 2D水流效果
水流的模拟主要运用了顶点变换和纹理动画的结合: 顶点变换中,利用正弦函数模拟河流的大致形态,例如波长,振幅等. 纹理动画中,将纹理坐标朝某一方向持续滚动以形成流动的效果. 脚本如下: Shader & ...
- SQLServer查看分区表详细信息
SQL查看分区内记录个数,常规方法需要知道分区函数然后再显示,网上看到一个一句话显示的方法 ), ps.name ) as partition_scheme, p.partition_number, ...
- Luogu P3879 【[TJOI2010]阅读理解】
前言: 这个题一直有个疑问,最多一千行,每行五千字$1000\times5000=5e6$ $5e6\times26\times4\div1024\div1024\approx496Mb>125 ...
- Codeforces Round #556 (Div. 1)
Codeforces Round #556 (Div. 1) A. Prefix Sum Primes 给你一堆1,2,你可以任意排序,要求你输出的数列的前缀和中质数个数最大. 发现只有\(2\)是偶 ...
- 前端学习:学习笔记(HTML部分)
前端学习:学习笔记(HTML部分) HTML学习总结(图解) HTML简介 1.HTML是什么? 超文本标记语言 超文本:文字/图片/音频/视频.... 标记/标签 2.HTML的用途? 是用来编写静 ...
- 【spring boot】注解@Slf4j的使用
注解@Slf4j的使用 如果不想每次都写 private final Logger logger = LoggerFactory.getLogger(当前类名.class); 可以用注解@Slf4j ...
- win10家庭版添加本地策略
在桌面新建一个空文件夹(此处是需要新建文件夹而并非文件),文件夹的名称大家随意即可.如下图所示: 打开刚刚新建的文件夹(双击文件夹则打开文件夹).如下图所示: 在刚刚我们打开的文件夹资源地 ...
- Javascript屏蔽Backspace回退页面
允许对输入框密码框等控件删除字符,但是不允许页面进行回退 <html lang="en" xmlns="http://www.w3.org/1999/xhtml&q ...
- BUAA-OO-2019 第四单元总结
UML作业架构设计 这一单元的作业本质上是对数据之间的联系进行解析,并重新建立数据结构以方便查询的工作,这就要求我们了解各种UmlElement的结构以及他们之间的关系是如何组织的. 第十三次作业 在 ...
- FPM十一:点击POPUP显示明细
沿接着前面的Search和List.在LIST中点击一列,弹出窗口显示明细. 1.list中定义事件: METHOD if_fpm_guibb_list~get_definition. DATA:gt ...