通过select进行io多路复用

io多路复用的原理和阻塞io相似,只是select可以同时监听多个连接,并且对连接的变化做出响应。

1.select

  即使是tcp也可以同时连接多个客户端

from socket import *
import selects1=socket(AF_INET,SOCK_STREAM)
s1.bind(('127.0.0.1',8080))
s1.listen(5)
s1.setblocking(False)while 1:r,w,e=select.select([s1,],[],[])#r就是select监听的列表,可以是多个for i in r:conn,addr=i.accept()conn.send('good'.encode('utf8'))data=conn.recv(1024)print(data.decode('utf-8'))

服务端

from socket import *c1=socket(AF_INET,SOCK_STREAM)
c1.connect(('127.0.0.1',8080))while 1:c1.send('hello'.encode('utf8'))data=c1.recv(1024)print(data.decode('utf-8'))

客户端

2.selector

  

import  selectors
from socket import *def fun_s2(s2,mask):conn,addr=s2.accept()conn.setblocking(False)s1.register(conn,selectors.EVENT_READ,fun_conn)
def fun_conn(conn,mask):data=conn.recv(1024)print(data.decode('utf-8'))s1=selectors.DefaultSelector()s2=socket(AF_INET,SOCK_STREAM)
s2.bind(('127.0.0.1',8080))
s2.listen(5)
s2.setblocking(False)s1.register(s2,selectors.EVENT_READ,fun_s2)while 1:l=s1.select()for i,mask in l:callback=i.datacallback(i.fileobj,mask)

from socket import *c1=socket(AF_INET,SOCK_STREAM)
c1.connect(('127.0.0.1',8080))while 1:c1.send(input().encode('utf8'))data=c1.recv(1024)print(data.decode('utf-8'))

其实就是写了两个函数,一个sock调用,一个conn调用,一个完成绑定,一个完成收发操作。

转载于:https://www.cnblogs.com/hai125698/p/9440153.html

2018-08-06-Python全栈开发day35-day36-select相关推荐

  1. python 全栈开发,Day36(作业讲解(大文件下载以及进度条展示),socket的更多方法介绍,验证客户端链接的合法性hmac,socketserver)...

     先来回顾一下昨天的内容 黏包现象 粘包现象的成因 : tcp协议的特点 面向流的 为了保证可靠传输 所以有很多优化的机制 无边界 所有在连接建立的基础上传递的数据之间没有界限 收发消息很有可能不完全 ...

  2. python全栈开发工程师_【2018重磅巨献】老男孩Python高级全栈开发工程师第三期...

    2018年老男孩python全栈第三期老男孩python全栈3期 老男孩教育Python全栈开发为国内首家专注python全方面开发的教育机构 老男孩Python全栈第三期课程详细目录,高清不加密! ...

  3. 某宝版千峰2018最新Python全栈开发加人工智能视频教程-尹成

    某宝版千峰2018最新Python全栈开发加人工智能视频教程-尹成重点内容 下载地址: http://www.itxdl.cn

  4. python 全栈开发,Day104(DRF用户认证,结算中心,django-redis)

    python 全栈开发,Day104(DRF用户认证,结算中心,django-redis) 考试第二部分:MySQL数据库 6.  MySQL中char和varchar的区别(1分) char是定长, ...

  5. python 全栈开发,Day133(玩具与玩具之间的对话,基于jieba gensim pypinyin实现的自然语言处理,打包apk)...

    python 全栈开发,Day133(玩具与玩具之间的对话,基于jieba gensim pypinyin实现的自然语言处理,打包apk) 先下载github代码,下面的操作,都是基于这个版本来的! ...

  6. python 全栈开发之路 day1

    python 全栈开发之路 day1 本节内容 计算机发展介绍 计算机硬件组成 计算机基本原理 计算机 计算机(computer)俗称电脑,是一种用于高速计算的电子计算机器,可以进行数值计算,又可以进 ...

  7. python 全栈开发,Day103(微信消息推送,结算中心业务流程)

    python 全栈开发,Day103(微信消息推送,结算中心业务流程) 昨日内容回顾 第一部分:考试题(Python基础)第二部分:路飞相关 1. 是否遇到bug?难解决的技术点?印象深刻的事?- o ...

  8. 【Python全栈开发从入门到实战】持续更新中......

    本专栏为Python全栈开发系列文章,技术包括Python基础.函数.文件.面向对象.网络编程.并发编程.MySQL数据库.HTML.JavaScript.CSS.JQuery.bootstrap.W ...

  9. 路飞学城python全栈开发_[Python] 老男孩路飞学城Python全栈开发重点班 骑士计划最新100G...

    简介 老男孩&路飞学城Python全栈开发重点班课程,作为Python全栈教学系列的重头戏,投入了全新的课程研发和教学精力,也是Python骑士计划的核心教学,由ALEX老师开班镇守,一线技术 ...

  10. python 全栈开发,Day86(上传文件,上传头像,CBV,python读写Excel,虚拟环境virtualenv)

    python 全栈开发,Day86(上传文件,上传头像,CBV,python读写Excel,虚拟环境virtualenv) 一.上传文件 上传一个图片 使用input type="file& ...

最新文章

  1. 《基于压缩传感的匹配追踪重建算法研究》读书笔记
  2. Python3算法基础练习:编程100例(1~5)
  3. DataTables中提示:DataTables warning: table id=example - Cannot reinitialise DataTable.
  4. Python对Excel的读操作(完成)
  5. axureux中后台管理信息系统通用原型方案 v2_前端公共图表数据大盘方案
  6. matlab 电力系统动态仿真,基于Matlab的电力系统动态仿真分析
  7. java View转换类型_java强制类型转换.
  8. NYOJ--12--喷水装置(二)
  9. CHAPTER 28 VMX SUPPORT FOR ADDRESS TRANSLATION
  10. (转)人工智能步入金融领域的主流玩法
  11. ORAN专题系列-20:5G O-RAN 通过TR-069协议实现一体化小基站的自动配置和安装
  12. 电脑版我的世界java_我的世界pc JAVA版
  13. “Python小屋”1300篇历史文章分类速查表
  14. 直播场景音频降噪,传统算法 VS AI 算法对比和实践
  15. 水浊度传感器( ADC 代码详解)
  16. Jetpack 架构组件:Room 数据库应用
  17. 你还有“不撞南墙不回头”之心吗?
  18. 056.单链表就地逆置
  19. hadoop性能测试
  20. ThinkPHP5远程代码执行漏洞

热门文章

  1. 数据库的表连接和函数学习
  2. vscode 配置sftp
  3. spark map函数中使用println无法输出
  4. STL vector的迭代器的熟练运用及lower_bound和upper_bound的使用
  5. Mysql 基础操作:DDL、DML、CRUD 与 常用命令
  6. RocketMQ 集群部署模式 理论介绍
  7. TypeScript完全解读(26课时)_9.TypeScript完全解读-TS中的类
  8. 使用octave符号运算求解不定积分、微分方程等(兼容matlab)
  9. PHP基础知识------页面静态化
  10. 存管 托管 监管 区别