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 ...
随机推荐
- Nodejs操作MySQL数据库
https://github.com/mysqljs/mysql 如何用nodejs操作MySql数据呢,其实写法还是简单的, 1.开始在你的node项目中 npm install mysql - ...
- C/C++深度优先搜索(递归树模拟)
//C++深度优先搜索(递归树模拟) #define _CRT_SECURE_NO_WARNINGS #include <iostream> #define MAX_N 1000 usin ...
- Jenkins集成Sonar Quabe和权限配置
目录 安装Sonar Jenkins配置sonar Maven Jenkins Job配置 Pipeline Jenkins Job配置 Sonar权限管理 Sonar quality Gate通过阈 ...
- Java & Android未捕获异常处理机制
一.背景 无论是Java还是Android项目,往往都会用到多线程.不管是主线程还是子线程,在运行过程中,都有可能出现未捕获异常.未捕获异常中含有详细的异常信息堆栈,可以很方便的去帮助我们排查问题. ...
- 五、Hexo静态博客背景及界面显示优化配置
示例预览:我的主页 背景图片添加 自动切换背景 静态本地背景 首先将已选定的背景图片放到博客根目录下的\source\images下 示例:D:\Blog\source\images\backgr ...
- Redis 分析部分功能所解决的问题
前言:说到缓存,大家都会想到redis,而redis中又有各种眼花缭乱的功能,今天就来看看这些功能能解决的问题. Redis官方简介 Redis是一个基于BSD开源的项目,是一个把结构化的数据放在内存 ...
- WPF 精修篇 事件触发器
原文:WPF 精修篇 事件触发器 事件触发器 一般使用的就是动画 <Grid> <TextBlock Text="事件触发器" Opacity="0.2 ...
- 有关 Table 获取Json 的解决方案
目录 写在前面 具体操作步骤 写在前面 在项目的开发过程中,我们使用最多的是表单的序列化.而有关以Table的序列化成Json的方法不太常见. 在做功能的时候发现,没有提交如何把Table序列化成Js ...
- Sqlserver表值函数来获取逗号分隔的ID
其功能为: 将字符串如'1,2,3,4,5,6' 拼接成SQL里面的id 1:使用: select * from Student where id IN( SELECT * FROM dbo.F_SP ...
- SOTA激活函数学习
除了之前较为流行的RELU激活函数,最近又新出了几个效果较好的激活函数 一.BERT激活函数 - GELU(gaussian error linear units)高斯误差线性单元 数学公式如下: X ...