selector模块
selector
selectors模块,此模块允许高级和高效的I / O多路复用,构建在select模块原语上。鼓励用户使用此模块,除非他们需要精确控制所使用的操作系统级原语。( 默认使用epoll,但由于Windows不支持epoll,如果在你的Windows上找不到epoll的话,就会用select)
它定义了一个抽象基类,有几个具体的实现工具(KqueueSelector, EpollSelector...),可以用于等待多个文件对象的I / O就绪通知。在下文中,file object” 指的是任何fileno() method,或一个原始文件的描述符。请参阅文件对象。BaseSelectorKqueueSelectorEpollSelectorfileno()
DefaultSelector是别名到当前平台上可用的最有效的实现:这应该是大多数用户的默认选择
注意支持的文件对象类型取决于平台:在Windows上,支持套接字,但不支持管道,而在Unix上,支持两者(也可以支持其他类型,例如fifos或特殊文件设备) select -->Low-level I/O multiplexing module. 低级IO多路复用模块 Classes hierarchy: 类层次结构
BaseSelector
+-- SelectSelector
+-- PollSelector
+-- EpollSelector
+-- DevpollSelector
+-- KqueueSelector 在下文中,事件是指示哪些I / O事件,应等待一个给定的文件对象上的位掩码。它可以是下面的模块常量的组合: 常量 含义
EVENT_READ 可用于读取
EVENT_WRITE 可用于写入 class selectors.SelectorKey
SelectorKey是一个命名的元组,用于将文件对象与其基础文件描述符,所选事件掩码和附加数据相关联。它由几个BaseSelector方法返回。 fileobj
已注册文件对象。 fd
底层的文件描述符。 events
必须等待该文件对象上的事件。 data
关联到该文件对象可选不透明数据:例如,这可以被用来存储每个客户端的会话ID。 class selectors.BaseSelector;
A BaseSelector is used to wait for I/O event readiness on multiple file objects. It supports file stream registration, unregistration, and a method to wait for I/O events on those streams, with an optional timeout. It’s an abstract base class, so cannot be instantiated. Use DefaultSelector instead, or one of SelectSelector, KqueueSelector etc. if you want to specifically use an implementation, and your platform supports it. BaseSelector and its concrete implementations support the context manager protocol.
BaseSelector用于等待多个文件对象的I / O事件就绪。它支持文件流注册,注销和一种方法来等待这些流上的I / O事件,并具有可选的超时。它是一个抽象的基类,所以不能实例化。如果您想要专门使用实现,请使用DefaultSelector,或者选择SelectSelector,KqueueSelector等之一,而您的平台支持它。 BaseSelector及其具体实现支持上下文管理器协议。 abstractmethod register(fileobj, events, data=None)注册一个文件对象供选择,监测它的I / O事件。
FileObj文件是文件要监视的对象。它可以是一个整数文件描述符或具有一个对象fileno()的方法。 事件是要监视的事件的位掩码。 数据是一个不透明的对象。
这将返回一个新的实例,或者提出了一个 无效的事件面罩或文件描述符的情况下,或者 如果该文件对象已注册。SelectorKeyValueErrorKeyError abstractmethod unregister(fileobj)从选择注销一个文件对象,从监控中移除。一个文件对象应被关闭之前被注销。
FileObj文件必须是一个文件对象之前注册。
这返回相关的SelectorKey实例,或者如果没有注册fileobj则引发一个KeyError。如果fileobj无效(例如它没有fileno()方法或者它的fileno()方法有一个无效的返回值,它将引发ValueError)。 modify(fileobj, events, data=None)更改注册的文件对象的监控事件或连接数据。
这相当于BaseSelector.unregister(fileobj)()后跟BaseSelector.register(fileobj,events,data)(),除了它可以更有效地实现。
这将返回一个新的SelectorKey实例,或者在无效事件掩码或文件描述符的情况下引发ValueError,如果文件对象未注册,则引发KeyError。 abstractmethod select(timeout=None)等到一些已注册的文件对象准备就绪,或超时。
如果timeout> 0,则指定最大等待时间(以秒为单位)。如果timeout <= 0,调用将不会阻塞,并且将报告当前准备好的文件对象。如果超时为无,调用将阻塞,直到受监视的文件对象准备就绪。
这返回一个(key, events)元组的列表,每个准备好的文件对象一个。
key是与ready文件对象相对应的SelectorKey实例。事件是在此文件对象上准备好的事件的位掩码。
注意 在这种情况下,一个空的列表将返回:之前的任何文件对象准备好,或者当前进程收到信号超时已过这种方法可以返回。
在3.5版本中改为:该选择现在重新尝试时信号中断,如果信号处理程序并没有引发异常的重新计算超时(见 PEP 475的理由),而不是超时之前返回事件的空列表。 close()
关闭selector.
这必须被调用以确保任何基础资源被释放。选择器一旦关闭,不得使用。 get_key(fileobj)
返回与注册文件对象相关联的键。
这将返回与此文件对象关联的SelectorKey实例,或者如果文件对象未注册,则引发KeyError。 abstractmethod get_map()
Return a mapping of file objects to selector keys.返回文件对象到selector keys的映射。
这将返回一个映射实例,将注册的文件对象映射到其关联的SelectorKey实例。 class selectors.DefaultSelector
默认选择器类,使用当前平台上可用的最高效的实现。这应该是大多数用户的默认选择。 class selectors.SelectSelector
select.select()-based selector. class selectors.PollSelector
select.poll()-based selector. class selectors.EpollSelector
select.epoll()-based selector.。 fileno()
这将返回由底层使用的文件描述符 select.epoll()对象。 class selectors.DevpollSelector
select.devpoll()-based selector. fileno()
这将返回由底层使用的文件描述符 select.devpoll()对象。
在新版本3.5。 class selectors.KqueueSelector
select.kqueue()-based selector. fileno()
这将返回由底层使用的文件描述符 select.kqueue()对象。
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, read)#这次的回调函数变为read,不再是accept,只要有新连接进来就注册read回调函数 def read(conn, mask):
data = conn.recv(1024) # Should be ready
if data:
print('echoing', repr(data), 'to', conn)
conn.send(data) # Hope it won't block
else:
print('closing', conn)
sel.unregister(conn)
conn.close() sock = socket.socket()
sock.bind(('localhost', 10000))
sock.listen(100)
sock.setblocking(False)#设置为非阻塞模式
sel.register(sock, selectors.EVENT_READ, accept)#注册到sel while True:
events = sel.select()# 默认为阻塞,不阻塞代表有新连接进来,有活动连接就返回活动连接列表
for key, mask in events:
callback = key.data #相当于accept,
# 一有连接进来就调用accept
callback(key.fileobj, mask)#key.fileobj=文件句柄
example
selector模块的更多相关文章
- 读Zepto源码之Selector模块
Selector 模块是对 Zepto 选择器的扩展,使得 Zepto 选择器也可以支持部分 CSS3 选择器和 eq 等 Zepto 定义的选择器. 在阅读本篇文章之前,最好先阅读<读Zept ...
- selector 模块
selector 模块进行自动匹配,当是windows系统时,自动匹配select, linux系统时,自动匹配epoll,传输时会明确告诉内核响应服务器的地址,速度要更快 import select ...
- 190707select和selector模块
一.select模块 Python select socket server代码示例 # Author:Li Dongfei import select, socket, sys, queue ser ...
- python基础(17)-IO模型&selector模块
先说一下IO发生时涉及的对象和步骤.对于一个network IO (这里我们以read举例),它会涉及到两个系统对象,一个是调用这个IO的process (or thread),另一个就是系统内核(k ...
- python使用selector模块编写FTP
server import os import socket import time import selectors BASE_DIR = os.path.dirname(os.path.abspa ...
- selector模块使用
#服务端 from socket import * import selectors sel=selectors.DefaultSelector() def accept(server_fileobj ...
- RequireJS入门之二——第二例(写自己的模块)
第一节遗留的问题: 中文乱码: 修改require.js文件,搜索charset 关键字,修改为GBK:(貌似乱不乱码和jquery版本有问题,切换GBK和utf-8!!) 路 径: 仅 ...
- 读Zepto源码之Touch模块
大家都知道,因为历史原因,移动端上的点击事件会有 300ms 左右的延迟,Zepto 的 touch 模块解决的就是移动端点击延迟的问题,同时也提供了滑动的 swipe 事件. 读 Zepto 源码系 ...
- 读Zepto源码之Gesture模块
Gesture 模块基于 IOS 上的 Gesture 事件的封装,利用 scale 属性,封装出 pinch 系列事件. 读 Zepto 源码系列文章已经放到了github上,欢迎star: rea ...
随机推荐
- spring mvc中拦截器配置mvc:interceptors
其实在mvc:interceptors标签中,有两种类型的配置,一种直接配置一个bean(bean和ref归为一类),另一种还要配置上拦截的路径和排除的路径.直接配置的bean那就代表对所有的请求进行 ...
- pycharm-community-3.1.1.tar.gz下载
国外服务器着实慢, 下载地址:http://yun.baidu.com/share/link?shareid=2521912381&uk=3020189984
- js 控制按钮点击后不可用
<input type="button" id="btn" value="免费获取验证码" /> <script type ...
- cocos html5 资讯
1.visual assistx vs 插件 http://www.cr173.com/soft/32656.html 2. Box2D物理引擎 3. csdnhttp://www.csdn. ...
- Hibernate中:不看数据库,不看XML文件,不看查询语句,怎么样能知道表结构?
Hibernate中:不看数据库,不看XML文件,不看查询语句,怎么样能知道表结构? 解答:可以看与XML文件对应的域模型.
- cobbler default system 网络安装时主机的menu上只有一个local选项
问题:使用cobbler default system 做pxe网络安装时,主机启动后安装menu上只有一个local选项,看不到对应的system名字 解决:cobbler default syst ...
- ChemDraw绘制DNA结构的技巧
对生物有一定了解的朋友都知道DNA是染色体的重要组成部分,DNA结构中包含重要的遗传物质,孩子的DNA来自父母DNA的组合,这就是为什么“一家人相像”的奥秘所在.ChemDraw虽然号称是化学结构绘制 ...
- 尼康D90多点对焦
11点对焦 上市时间 2008 类型 单反数码相机 对焦方式 单区域AF:在选择区域内只对焦于目标可以从11个AF点传感器中的任意一个中选择 动态区域AF:对焦于选择区域的目标上,如果目标离开原来位置 ...
- Ubuntu系统-网络配置
网络配置 静态IP root@ubuntu:~# cat /etc/network/interfaces # This file describes the network interfaces av ...
- Python程序的性能分析指南(转)
原文地址 :http://blog.jobbole.com/47619/ 虽然不是所有的Python程序都需要严格的性能分析,不过知道如何利用Python生态圈里的工具来分析性能,也是不错的. 分析一 ...