uselect

简介

uselect 模块提供了等待数据流的事件功能。

常数

select.POLLIN - 读取可用数据

select.POLLOUT - 写入更多数据

select.POLLERR - 发生错误

select.POLLHUP - 流结束/连接终止检测

函数

select.select(rlist, wlist, xlist[, timeout])

监控对象何时可读或可写,一旦监控的对象状态改变,返回结果(阻塞线程)。这个函数是为了兼容,效率不高,推荐用 poll 函数 。

  1. rlist:等待读就绪的文件描述符数组
  2. wlist:等待写就绪的文件描述符数组
  3. xlist:等待异常的数组
  4. timeout:等待时间(单位:秒)

示例:

  1. def selectTest():
  2. global s
  3. rs, ws, es = select.select([s,], [], [])
  4. #程序会在此等待直到对象s可读
  5. print(rs)
  6. for i in rs:
  7. if i == s:
  8. print("s can read now")
  9. data,addr=s.recvfrom(1024)
  10. print('received:',data,'from',addr)

Poll 类

select.poll()

创建 poll 实例。

示例:

  1. >>>poller = select.poll()
  2. >>>print(poller)
  3. <poll>

poll.register(obj[, eventmask])

注册一个用以监控的对象,并设置被监控对象的监控标志位 flag。

  1. obj:被监控的对象
  2. flag:被监控的标志
  3. select.POLLIN 可读
  4. select.POLLHUP 已挂断
  5. select.POLLERR 出错
  6. select.POLLOUT 可写

poll.unregister(obj)

解除监控的对象的注册。

  1. obj:注册过的对象

示例:

  1. >>>READ_ONLY = select.POLLIN | select.POLLHUP | select.POLLERR
  2. >>>READ_WRITE = select.POLLOUT | READ_ONLY
  3. >>>poller.register(s, READ_WRITE)
  4. >>>poller.unregister(s)

poll.modify(obj, eventmask)

修改已注册的对象监控标志。

  1. obj:已注册的被监控对象
  2. flag:修改为的监控标志

示例:

  1. >>>READ_ONLY = select.POLLIN | select.POLLHUP | select.POLLERR
  2. >>>READ_WRITE = select.POLLOUT | READ_ONLY
  3. >>>poller.register(s, READ_WRITE)
  4. >>>poller.modify(s, READ_ONLY)

poll.poll([timeout])

等待至少一个已注册的对象准备就绪。返回 (obj, event, …) 元组, event 元素指定了一个流发生的事件,是上面所描述的 select.POLL*常量组合。 根据平台和版本的不同,在元组中可能有其他元素,所以不要假定元组的大小是 2 。如果超时,则返回空列表。

更多内容可参考 uselect


评论

原文: https://www.rt-thread.org/document/site/submodules/micropython/docs/05-System_Module/02-uselect/