Python——IO多路复用之select模块epoll方法
Python——IO多路复用之select模块epoll方法
使用epoll方法实现IO多路复用,使用方法基本与poll方法一致,epoll效率要高于select和poll。
.
├── epoll_client.py
├── epoll_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() # 创建epoll对象
p = epoll() # 创建地图(字典)
fdmap = {s.fileno(): s} # 注册关注(事件)
p.register(s, EPOLLIN | EPOLLERR)
# EPOLLIN 对应select方法中的参数rlist -> 等待处理的IO事件
# EPOLLOUT 对应select方法中的参数wlist -> 主动处理的IO事件
# EPOLLERR 对应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, EPOLLIN)
# 添加到地图中
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模块epoll方法的更多相关文章
- Python——IO多路复用之select模块poll方法
Python——IO多路复用之select模块poll方法 使用poll方法实现IO多路复用 .├── poll_client.py├── poll_server.py└── settings.py ...
- Python——IO多路复用之select模块select方法
Python——IO多路复用之select模块select方法 使用select模块的select方法实现Python——IO多路复用 实现同时将终端输入的文本以及客户端传输的文本写入文本文件中: w ...
- Linux网络通信编程(套接字模型TCP\UDP与IO多路复用模型select\poll\epoll)
Linux下测试代码: http://www.linuxhowtos.org/C_C++/socket.htm TCP模型 //TCPClient.c #include<string.h> ...
- IO多路复用之select poll epoll
参考文档: http://blog.csdn.net/tennysonsky/article/details/45745887 select(),poll(),epoll()都是I/O多路复用的机制. ...
- 【python】-- IO多路复用(select、poll、epoll)介绍及实现
IO多路复用(select.poll.epoll)介绍及select.epoll的实现 IO多路复用中包括 select.pool.epoll,这些都属于同步,还不属于异步 一.IO多路复用介绍 1. ...
- python网络编程——IO多路复用之select
1 IO多路复用的概念 原生socket客户端在与服务端建立连接时,即服务端调用accept方法时是阻塞的,同时服务端和客户端在收发数据(调用recv.send.sendall)时也是阻塞的.原生so ...
- 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多路复用:通过一种机制,一个进程可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作. ...
随机推荐
- RestTemplate使用教程
原文地址:https://www.cnblogs.com/f-anything/p/10084215.html 一.概述 spring框架提供的RestTemplate类可用于在应用中调用rest服务 ...
- 用java编写爬虫爬取电影
一.爬取前提1)本地安装了mysql数据库2)安装了idea或者eclipse等开发工具 二.爬取内容 电影名称.电影简介.电影图片.电影下载链接 三.爬取逻辑1)进入电影网列表页, 针对列表的htm ...
- 《Game Programming Patterns》游戏设计模式
转载自:https://blog.csdn.net/poem_qianmo/article/details/52505170 https://blog.csdn.net/poem_qianmo/art ...
- scala练习题--万年历
使用方法去完成 import scala.io.StdIn object work1 { def main(args: Array[String]): Unit = { // 1.先输出提示语句,并 ...
- Spark Core知识点复习-1
Day1111 Spark任务调度 Spark几个重要组件 Spark Core RDD的概念和特性 生成RDD的两种类型 RDD算子的两种类型 算子练习 分区 RDD的依赖关系 DAG:有向无环图 ...
- jquery动画控制非css属性
JQuery的animate()方法可以通过渐变的更改CSS属性来实现简单的动画效果, 比如 $("#box").animate({height:"300px" ...
- Newtonsoft.Json使用技巧
本篇将为大家介绍Newtonsoft.Json的一些高级用法,可以修改很少的代码解决上述问题. 阅读目录 Newtonsoft.Json介绍 基本用法 高级用法 总结 回到顶部 Newtonsoft. ...
- PIE创建带压缩的栅格数据集
这段时间我一直在研究如何用PIE创建带压缩的栅格数据集,由于我在比赛中使用的原始影像大小普遍都在300M以上,软件加载较慢,因此希望能对原始影像进行压缩,加快加载时间. 首先,该方法的关键是修改Dat ...
- python 进程和线程-进程和线程的比较以及分布式进程
进程和线程的比较 参考链接:https://www.liaoxuefeng.com/wiki/1016959663602400/1017631469467456 我们介绍了多进程和多线程,这是实现多任 ...
- vim 如何复制文件中多行到另一个文件
1.打开文件 vim a.txt b.tx 或者 vim *.txt 2.文件间切换 :n 切换到下一个文件 :wn 保存再切换 :N 到上一个文件 :wN 保存再切换 :.= 看当前行 3.假定当前 ...