Python/selectors模块

Python/selectors模块

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

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

常用共分为三种:

select、poll、epoll

select的缺点:

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

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

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

poll:

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

epoll:

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

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

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

4、最大启动项没有限额

selsect实例:

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

Python/selectors模块的相关文章

Python - selectors 模块

selectors 模块 它的功能与 linux 的 epoll,还是 select 模块,  poll 等类似: 实现高效的 I/O multiplexing ,  常用于非阻塞的 socket  的编程中 官方文档 这里 内部类 ? BaseSelector ? SelectSelector ? PollSelector ? EpollSelector ? DevpollSelector ? KqueueSelector ? DefaultSelector 实际使用为此类, 自动选择为当前环

python selectors 模块应用

模块使用示例1 import selectors import socket sel = selectors.DefaultSelector() def accept(sock, mask): conn, addr = sock.accept() # Should be ready 建立连接 print('accepted', conn, 'from', addr) conn.setblocking(False) sel.register(conn, selectors.EVENT_READ,

python之selectors模块

selectors模块是在python3.4版本中引进的,它封装了IO多路复用中的select和epoll,能够更快,更方便的实现多并发效果. 官方文档见:https://docs.python.org/3/library/selectors.html 以下是一个selectors模块的代码示范: #!/usr/bin/python #Author:sean import selectors import socket #selectors模块默认会用epoll,如果你的系统中没有epoll(比

python 协程, 异步IO Select 和 selectors 模块 多并发演示

主要内容 Gevent协程 Select\Poll\Epoll异步IO与事件驱动 selectors 模块 多并发演示 协程 协程,又称微线程,纤程.英文名Coroutine.一句话说明什么是线程:协程是一种用户态的轻量级线程. 协程拥有自己的寄存器上下文和栈.协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈.因此: 协程能保留上一次调用时的状态(即所有局部状态的一个特定组合),每次过程重入时,就相当于进入上一次调用的状态,换种说法:进入上一次离开

# 进程/线程/协程 # IO:同步/异步/阻塞/非阻塞 # greenlet gevent # 事件驱动与异步IO # Select\Poll\Epoll异步IO 以及selectors模块 # Python队列/RabbitMQ队列

1 # 进程/线程/协程 2 # IO:同步/异步/阻塞/非阻塞 3 # greenlet gevent 4 # 事件驱动与异步IO 5 # Select\Poll\Epoll异步IO 以及selectors模块 6 # Python队列/RabbitMQ队列 7 8 ############################################################################################## 9 1.什么是进程?进程和程序之间有什么

python异步编程--回调模型(selectors模块)

目录 0. 参考地址 1. 前言 2. 核心类 3. SelectSelector核心函数代码分析 3.1 注册 3.2 注销 3.3 查询 4. 别名 5. 总结 6. 代码报错问题 1. 文件描述符数量 2. 监听列表是否可以为空 7. 关系图 0. 参考地址 基本介绍 https://www.cnblogs.com/yinheyi/p/8127871.html 实验演示 https://www.cnblogs.com/xybaby/p/6406191.html#_label_2 详细讲解

{python之IO多路复用} IO模型介绍 阻塞IO(blocking IO) 非阻塞IO(non-blocking IO) 多路复用IO(IO multiplexing) 异步IO(Asynchronous I/O) IO模型比较分析 selectors模块

阅读目录 一 IO模型介绍 二 阻塞IO(blocking IO) 三 非阻塞IO(non-blocking IO) 四 多路复用IO(IO multiplexing) 五 异步IO(Asynchronous I/O) 六 IO模型比较分析 七 selectors模块 一 IO模型介绍 同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出的答案都可能

(转)python异步编程--回调模型(selectors模块)

原文:https://www.cnblogs.com/zzzlw/p/9384308.html#top 目录 0. 参考地址 1. 前言 2. 核心类 3. SelectSelector核心函数代码分析 3.1 注册 3.2 注销 3.3 查询 4. 别名 5. 总结 6. 代码报错问题 1. 文件描述符数量 2. 监听列表是否可以为空 7. 关系图 0. 参考地址 基本介绍 https://www.cnblogs.com/yinheyi/p/8127871.html实验演示 https://w

SELECTORS模块实现并发简单版FTP

环境:windows, python 3.5功能:使用SELECTORS模块实现并发简单版FTP允许多用户并发上传下载文件 结构:ftp_client ---| bin ---| start_client.py ......启动客户端 conf---| config.py ......客户端参数配置 system.ini ......客户端参数配置文件 core---| clients.py ......客户端主程序 home ......默认下载路径ftp_server ---| bin --