13518219792

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

创新互联Python教程:selectors—-高级I/O复用库

selectors —- 高级 I/O 复用库

3.4 新版功能.

创新互联专注于习水网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供习水营销型网站建设,习水网站制作、习水网页设计、习水网站官网定制、重庆小程序开发服务,打造习水网络公司原创品牌,更为您提供习水网站排名全网营销落地服务。

源码: Lib/selectors.py


概述

此模块允许高层级且高效率的 I/O 复用,它建立在 select 模块原型的基础之上。 推荐用户改用此模块,除非他们希望对所使用的 OS 层级原型进行精确控制。

它定义了一个 BaseSelector 抽象基类,以及多个实际的实现 (KqueueSelector, EpollSelector…),它们可被用于在多个文件对象上等待 I/O 就绪通知。 在下文中,”文件对象” 是指任何具有 fileno() 方法的对象,或是一个原始文件描述符。 参见 file object。

DefaultSelector 是一个指向当前平台上可用的最高效实现的别名:这应为大多数用户的默认选择。

备注

受支持的文件对象类型取决于具体平台:在 Windows 上,支持套接字但不支持管道,而在 Unix 上两者均受支持(某些其他类型也可能受支持,例如 fifo 或特殊文件设备等)。

参见

select

低层级的 I/O 多路复用模块。

Availability: not Emscripten, not WASI.

This module does not work or is not available on WebAssembly platforms wasm32-emscripten and wasm32-wasi. See WebAssembly platforms for more information.

类的层次结构:

 
 
 
 
  1. BaseSelector
  2. +-- SelectSelector
  3. +-- PollSelector
  4. +-- EpollSelector
  5. +-- DevpollSelector
  6. +-- KqueueSelector

下文中,events 一个位掩码,指明哪些 I/O 事件要在给定的文件对象上执行等待。 它可以是以下模块级常量的组合:

常量

含意

EVENT_READ

可读

EVENT_WRITE

可写

class selectors.SelectorKey

SelectorKey 是一个 namedtuple,用来将文件对象关联到其下层的文件描述符、选定事件掩码和附加数据等。 它会被某些 BaseSelector 方法返回。

class selectors.BaseSelector

一个 BaseSelector,用来在多个文件对象上等待 I/O 事件就绪。 它支持文件流注册、注销,以及在这些流上等待 I/O 事件的方法。 它是一个抽象基类,因此不能被实例化。 请改用 DefaultSelector,或者 SelectSelector, KqueueSelector 等。 如果你想要指明使用某个实现,并且你的平台支持它的话。 BaseSelector 及其具体实现支持 context manager 协议。

class selectors.DefaultSelector

默认的选择器类,使用当前平台上可用的最高效实现。 这应为大多数用户的默认选择。

class selectors.SelectSelector

基于 select.select() 的选择器。

class selectors.PollSelector

基于 select.poll() 的选择器。

class selectors.EpollSelector

基于 select.epoll() 的选择器。

class selectors.DevpollSelector

基于 select.devpoll() 的选择器。

3.5 新版功能.

class selectors.KqueueSelector

基于 select.kqueue() 的选择器。

例子

下面是一个简单的回显服务器实现:

 
 
 
 
  1. import selectors
  2. import socket
  3. sel = selectors.DefaultSelector()
  4. def accept(sock, mask):
  5. conn, addr = sock.accept() # Should be ready
  6. print('accepted', conn, 'from', addr)
  7. conn.setblocking(False)
  8. sel.register(conn, selectors.EVENT_READ, read)
  9. def read(conn, mask):
  10. data = conn.recv(1000) # Should be ready
  11. if data:
  12. print('echoing', repr(data), 'to', conn)
  13. conn.send(data) # Hope it won't block
  14. else:
  15. print('closing', conn)
  16. sel.unregister(conn)
  17. conn.close()
  18. sock = socket.socket()
  19. sock.bind(('localhost', 1234))
  20. sock.listen(100)
  21. sock.setblocking(False)
  22. sel.register(sock, selectors.EVENT_READ, accept)
  23. while True:
  24. events = sel.select()
  25. for key, mask in events:
  26. callback = key.data
  27. callback(key.fileobj, mask)

新闻标题:创新互联Python教程:selectors—-高级I/O复用库
链接URL:http://cdbrznjsb.com/article/cogogdc.html

其他资讯

让你的专属顾问为你服务