select.py 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. """
  2. uselect 模块提供了等待数据流的事件功能。
  3. """
  4. def select(rlist, wlist, xlist) -> None:
  5. """监控对象何时可读或可写,一旦监控的对象状态改变,返回结果(阻塞线程)。这个函数是为了兼容,效率不高,推荐用 poll 函数 。
  6. - select.select(rlist, wlist, xlist[, timeout])
  7. - rlist:等待读就绪的文件描述符数组
  8. - wlist:等待写就绪的文件描述符数组
  9. - xlist:等待异常的数组
  10. - timeout:等待时间(单位:秒)
  11. 示例:
  12. - def selectTest():
  13. - global s
  14. - rs, ws, es = select.select([s,], [], [])
  15. - #程序会在此等待直到对象s可读
  16. - print(rs)
  17. - for i in rs:
  18. - if i == s:
  19. - print("s can read now")
  20. - data,addr=s.recvfrom(1024)
  21. - print('received:',data,'from',addr)"""
  22. ...
  23. class poll(string):
  24. """创建 poll 实例。
  25. 示例:
  26. - poller = select.poll()
  27. - print(poller)
  28. - <poll>
  29. """
  30. def __init__(self) -> None:
  31. ...
  32. def register(obj) -> None:
  33. """
  34. - register(obj[, eventmask])
  35. 注册一个用以监控的对象,并设置被监控对象的监控标志位 flag。
  36. - obj:被监控的对象
  37. - flag:被监控的标志
  38. - select.POLLIN — 可读
  39. - select.POLLHUP — 已挂断
  40. - select.POLLERR — 出错
  41. - select.POLLOUT — 可写
  42. """
  43. ...
  44. def unregister(obj) -> None:
  45. """解除监控的对象的注册。
  46. obj:注册过的对象
  47. 示例:
  48. - READ_ONLY = select.POLLIN | select.POLLHUP | select.POLLERR
  49. - READ_WRITE = select.POLLOUT | READ_ONLY
  50. - poller.register(s, READ_WRITE)
  51. - poller.unregister(s)
  52. """
  53. ...
  54. def modify(obj, eventmask) -> None:
  55. """修改已注册的对象监控标志。
  56. - obj:已注册的被监控对象
  57. - flag:修改为的监控标志
  58. 示例:
  59. - READ_ONLY = select.POLLIN | select.POLLHUP | select.POLLERR
  60. - READ_WRITE = select.POLLOUT | READ_ONLY
  61. - poller.register(s, READ_WRITE)
  62. - poller.modify(s, READ_ONLY)
  63. """
  64. ...
  65. def poll(timeout) -> None:
  66. """
  67. - poll([timeout])
  68. 等待至少一个已注册的对象准备就绪。返回 (obj, event, ...) 元组, event 元素指定了一个流发生的事件,是上面所描述的 select.POLL*常量组合。 根据平台和版本的不同,在元组中可能有其他元素,所以不要假定元组的大小是 2 。如果超时,则返回空列表。
  69. """
  70. ...
  71. POLLIN = ... # type: int
  72. POLLOUT = ... # type: int
  73. POLLERR = ... # type: int
  74. POLLHUP = ... # type: int