Python 第三方模块之 APScheduler - 定时任务
注解:selectors 模块是在 select 模块原型的基础上进行高级且高效的 I/O 复用。推荐用户改用 selectors 模块,除非用户希望对 OS 级的函数原型进行精确控制。
selectors 主要的函数:
selectors.DefaultSelector()
自动选择文件IO模型
选择一个当前平台最优的IO模型,一般来说是 epoll 或 kqueue。存在的可选项包括:
- SelectSelector
- PollSelector
- EpollSelector
- DevpollSelector
- KqueueSelector
DefaultSelector 是一个指向当前平台上可用的最高效实现的别名,当选择epoll时,可以认为 sel = EpollSelector
。返回:一个select对象
sel.register(sock, selectors.EVENT_READ, accept)
文件注册
函数原型:register(fileobj, events, data=None)
注册一个用于选择的文件对象,在其上监视 I/O 事件。
fileobj 是要监视的文件对象。它可以是整数形式的文件描述符或者具有 fileno() 方法的对象。
events 是要监视的事件的位掩码。
data 是一个任意对象或变量。
返回:这将返回一个新的 SelectorKey 实例,实例具体内容见下一个函数的key
events = sel.select()
获取就绪文件
函数原型:select(timeout=None)
可用于遍历获取状态变为就绪注册的文件,如果设置超时时间则可能会抛出超时异常。返回:一个(key, events)的元组,
- key: 一个SelectorKey类的实例,包括
- fileobj: 已注册的文件对象。
- fd: 下层的文件描述符
events: 必须在此文件对象上被等待的事件。
events:文件句柄可读还是可写的标识。为EVENT_READ或EVENT_WRITE,或者二者的组合
示例
服务端
1 |
|
客户端
1 |
|
asyncio 和 selector 的关系
selectors 则是 asyncio 的底层实现之一。asyncio实现的协程是由事件循环
+ 任务
组成的,而 selector 就是事件循环的重要依赖模块。
asyncio 使用了 selectors 模块来实现底层的并发 I/O 操作。通过将 selectors 的功能封装为 asyncio 提供的事件循环(Event Loop)和其他协程相关的工具。