selector
来源:互联网 发布:java 自行车 编辑:程序博客网 时间:2024/06/10 21:23
背景:
selector模块将select,poll,epoll模块进行了封装,epoll效率最高,默认调用epoll
windows只支持select,底层根据系统支持自动选择
import selectorsimport socketsel = selectors.DefaultSelector()def listen_conn_function(conn, mask): conn.sendall(conn.recv(1024))def listen_server_function(server, mask): sel.register(server.accept()[0], selectors.EVENT_READ, listen_conn_function)host = 'localhost'port = 10086address = host, portserver = socket.socket(socket.AF_INET, socket.SOCK_STREAM)server.bind(address)server.listen()sel.register(server, selectors.EVENT_READ, listen_server_function)while True: events = sel.select() for key, mask in events: key.data(key.fileobj, mask)
selector自动实现监听和处理操作,只需要设置一下监听管理,监听对象和监听操作即可
监听管理:
sel = selectors.DefaultSelector()获取监听管理对象,监听方式底层自动选择
注册监听:
sel.register(server, selectors.EVENT_READ, listen_server_function)通过注册,把监听对象和监听操作交给监听对象管理,监听管理对象自动管理,实现监听并操作
监听执行:
events = sel.select()for key, mask in events: key.data(key.fileobj, mask)阻塞并获取信息,调用监听绑定方法和监听对象执行操作
监听管理者信息:
regiester:
注册监听,传入的参数分别是监听对象,监听类型,监听执行方法
unregiester:
注销监听,传入已监听对象即可
select:
开始阻塞,直到监听对象活跃
key:
监听事件,包含监听对象和监听方法
key.data:
监听事件绑定数据,即监听操作
key.fileobj:
监听事件的监听对象
操作流程:
准备监听管理对象:
创建监听管理对象,所有事件交由它进行监听并处理
准备监听对象:
创建监听对象,监听对象可以任意,只要能进行激活,可以被监听,一般是IO操作对象
准备监听方法:
入参包含监听对象,定义操作方法,在监听对象进入活跃状态时执行操作,包括注销监听
注册监听事件:
通过注册,把监听对象和操作绑定,组合成监听事件交由监听管理对象进行管理,自动监听和执行操作
监听事件执行:
外部阻塞,获取监听事件信息,命令事件执行
程序员任务:
数据的准备:
准备物料,让任务就绪
流程的规划:
排布任务,指定流程
时机的掌控:
把握大局,掌控任务的阻塞和执行,不在忙碌于具体细节
阅读全文
1 0
- selector
- selector
- @selector
- selector
- @selector
- Selector
- @selector
- @selector
- Selector
- selector
- @selector
- selector
- selector
- Selector
- @selector
- SELECTOR
- selector
- Selector
- 移动架构08_单例模式
- LeetCode题解 第四周
- mysql优化-索引类型
- 2017/10/1 学习日记
- ffmpeg 实现对图片逐帧的处理
- selector
- 数字全排列返回list的list:java实现
- 一个BS框架工程搭建笔记
- strcpy时如何有效的在堆区申请内存
- 面向对象第三个特征----多态II(类型判断)
- 【POJ 3436 ACM Computer Factory】网络流 & 拆点 & Dinic
- Java IO流分析整理
- 数据的处理
- 逻辑思维3