Day15 - Python基础15 模块学习-selectors
本节内容
1:Python/selectors模块
2:selsect实例
1:Python/selectors模块及队列
selectors模块是可以实现IO多路复用机制:
它具有根据平台选出最佳的IO多路机制,比如在win的系统上他默认的是select模式而在linux上它默认的epoll。
常用IO多路复用共分为三种: select、poll、epoll 且windows上只支持select,而linux上都支持
select的缺点:
1、每次调用都要将所有的文件描述符(fd)拷贝的内核空间,导致效率下降
2、遍历所有的文件描述符(fd)查看是否有数据访问
3、最大链接数限额(1024)
poll:
它就是select和epoll的过渡阶段,它没有最大链接数的限额
epoll:
1、第一个函数是创建一个epoll句柄,将所有的描述符(fd)拷贝到内核空间,但只拷贝一次。
2、回调函数,某一个函数或某一个动作成功完成之后会触发的函数为所有的描述符(fd)绑定一个回调函数,一旦有数据访问就是触发该回调函数,回调函数将(fd)放到链表中
3、函数判断链表是否为空
4、最大启动项没有限额
2:selsect实例:
###服务端################ import selectors #基于select模块实现的IO多路复用,建议大家使用
import socket
sock=socket.socket()
sock.bind(('127.0.0.1',8800))
sock.listen(5)
sock.setblocking(False)
sel=selectors.DefaultSelector() #根据平台选择最佳的IO多路机制,比如linux就会选择epoll def read(conn,mask):
try:
data=conn.recv(1024)
print(data.decode('utf8'))
data2=input('>>>>')
conn.send(data2.encode('utf8'))
except Exception:
sel.unregister(conn) def accept(sock,mask):
conn,addr=sock.accept()
print('-------',conn)
sel.register(conn,selectors.EVENT_READ,read) sel.register(sock, selectors.EVENT_READ, accept) #注册功能,一旦有反应继续往下执行 while True:
print('wating....')
events=sel.select() #event和select的监听对象[(sock),(),()]一样,都是在监听 for key,mask in events:
# print(key.data) #accept 找出有活动的绑定函数
# print(key.fileobj) #sock 找出有活动的文件描述符 func=key.data
obj=key.fileobj func(obj,mask) #1 accept(sock,mask) 2read(conn,mask) ##客户端#################
import socket
tin=socket.socket()
tin.connect(('127.0.0.1',8800))
while True:
inp=input('>>>>')
tin.send(inp.encode('utf8'))
data=tin.recv(1024)
print(data.decode('utf8'))
Day15 - Python基础15 模块学习-selectors的更多相关文章
- Day11 - Python基础11 模块学习——optparse
Python 有两个内建的模块用于处理命令行参数: 一个是 getopt,<Deep in python>一书中也有提到,只能简单处理 命令行参数: 另一个是 optparse,它功能强大 ...
- 十五. Python基础(15)--内置函数-1
十五. Python基础(15)--内置函数-1 1 ● eval(), exec(), compile() 执行字符串数据类型的python代码 检测#import os 'import' in c ...
- python基础——第三方模块
python基础——第三方模块 在Python中,安装第三方模块,是通过包管理工具pip完成的. 如果你正在使用Mac或Linux,安装pip本身这个步骤就可以跳过了. 如果你正在使用Window ...
- python基础——使用模块
python基础——使用模块 Python本身就内置了很多非常有用的模块,只要安装完毕,这些模块就可以立刻使用. 我们以内建的sys模块为例,编写一个hello的模块: #!/usr/bin/env ...
- 二十五. Python基础(25)--模块和包
二十五. Python基础(25)--模块和包 ● 知识框架 ● 模块的属性__name__ # my_module.py def fun1(): print("Hello& ...
- python中confIgparser模块学习
python中configparser模块学习 ConfigParser模块在python中用来读取配置文件,配置文件的格式跟windows下的ini配置文件相似,可以包含一个或多个节(section ...
- python 基础之 模块
Python 基础之模块 一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 就是一个python文件中定义好了类和方法,实现了一些功能,可以被别的python文 ...
- Day15 Python基础之logging模块(十三)
参考源:http://www.cnblogs.com/yuanchenqi/articles/5732581.html logging模块 (****重点***) 一 (简单应用) import lo ...
- 学习PYTHON之路, DAY 6 - PYTHON 基础 6 (模块)
一 安装,导入模块 安装: pip3 install 模块名称 导入: import module from module.xx.xx import xx from module.xx.xx impo ...
随机推荐
- Centos 下安装 Nginx(新)
今天重新实践了下 CentOS 7.6 下安装 Nginx,总结了一条更直接并简单的方式 从官方获取写入 nginx.repo 的方式 从官网查看文档,获取 nginx.repo 的文档内容,将其内容 ...
- EntityFramework中实体类到表名的批量映射
在使用EntityFramework做CodeFirst开发时,经常需要将实体类映射到数据库表,但是C#实体类和数据库表中的命名遵循的是不同的规范,这就需要为每个实体类做一个到数据库表名的映射.大多情 ...
- TensorFlow实现简单线性回归示例代码
# -*- coding: utf-8 -*- import tensorflow as tf import numpy as np import matplotlib.pyplot as plt d ...
- AoE 搭档 TensorFlow Lite ,让终端侧 AI 开发变得更加简单。
AoE( AI on Edge , https://github.com/didi/AoE ) 是滴滴近期开源的终端侧 AI 集成运行时环境 ( IRE ). 随着人工智能技术快速发展,近几年涌现出了 ...
- JS基础语法---String(字符串的案例)
练习1: var str = "我的宝宝最可爱,声音嗲嗲的"; var key = "可爱"; //先获取要截取的字符串的索引位置 var index = st ...
- FlowPortal 6.00c 使用xFormDesigner复制粘贴中文总是乱码
环境: Windows Server 2016中文版 FlowPortal 6.00C 问题: 使用xFormDesigner 在源码选项卡复制粘贴中文总是乱码. 解决办法: 控制面板---区域--- ...
- sharepoint2010 部署到Windows server 2012 R2服务器遇到的问题
最近由于客户服务器升级到windows server2012 R2 版本,生产环境需要相应升级. 查看很多资料,服务器升级到windows server2012 R2 版本,sharepoint要升级 ...
- 逆向学习周记-C语言空函数
实验环境:WIN7虚拟机 软件:VC6 首先在VC6里面写一个空函数Fun(): F7编译运行一下,没有出错,接着在函数处使用F9下断点,使程序运行到Fun函数时停下. 接着F5开始运行这个程序 程序 ...
- 25.推荐---协同过滤(Collaborative Filtering)
协同过滤需要注意的三点: gray sheep(有人喜欢追求特别,协同过滤一般只能从共同的人或物间找相似) shilling attack(水军刷好评导致数据错误,无法带来精确的推荐) cold st ...
- 【Postman】举例实战——天气查询
准备工作: 1.下载postman(搜索官网下载即可) 2.接口文档(以聚合上去免费API:天气查询接口) 打开postman: 1.输入url 2.请求方式 3.请求参数 4.在postman中运行 ...