阻塞IO,非阻塞IO,IO多路复用模型
#服务端 import socket sk = socket.socket() sk.bind(('127.0.0.1',8080)) sk.listen() while True: conn, address = sk.accept() while True: ret = conn.recv(1024) print(ret) inp = input('>>>') conn.sendall(inp.encode('utf-8')) # conn.sendall(bytes(inp, 'utf-8')) #客户端 import socket sk=socket.socket() sk.connect(('127.0.0.1',8080)) while True: inp=input('>>>>') sk.sendall(bytes(inp,'utf-8')) data=sk.recv(1024) print(str(data,'utf-8'))
#非阻塞IO进行recvform系统调用,会马上得到一个结果,如果结果是一个error(异常处理) # 此时证明数据还未准备好,在等在下次进行recvform系统调用的期间,进程可以做其他事情 #这个过程非阻塞将整片时间片分成N多小阻塞,循环往复的进行recvform的系统调用 #服务端 import time import socket import os sk = socket.socket(socket.AF_INET,socket.SOCK_STREAM) # sk.setsockopt sk.bind(('127.0.0.1',8080)) sk.listen(5) sk.setblocking(False) while True: try: print('waiting client connection.......') conn,address =sk.accept() # print(os.getpid()) print('++++',address) ret = conn.recv(1024) #系统级内核数据拷贝到用户级内存 print(ret) conn.close() except Exception as e: print(e) time.sleep(4)#在此期间进程可以做其他任务 #客户端 import time import socket sk = socket.socket(socket.AF_INET,socket.SOCK_STREAM) while True: sk.connect(('127.0.0.1',8080)) print('hello') sk.sendall(b'hello') time.sleep(2) break
#select的使用#服务端 import socket import select sk=socket.socket() sk.bind(('127.0.0.1',8080)) sk.listen(5) sk.setblocking(False) inputs=[sk,] #监听一个活动对象的列表 while True: r,w,e=select.select(inputs,[],[],5) #哪个对象活动了,r就会被选出来 print('可活动的列表长度%s' % len(inputs)) print('活动的对象只有%s个' % len(r)) # print(type(r)) for obj in r: if obj==sk: conn,add=obj.accept() print('conn:',conn) inputs.append(conn) #客户端的套接字对象放入活动列表中 print('append之后<<<',r) else: data_byte=obj.recv(1024) print(str(data_byte,'utf-8')) if not data_byte: inputs.remove(obj) continue inp=input('回答%s >>>' % inputs.index(obj)) obj.sendall(bytes(inp,'utf-8')) print('结尾>>>',r) #客户端 import socket sk=socket.socket() sk.connect(('127.0.0.1',8080)) while True: inp=input('>>>>') sk.sendall(bytes(inp,'utf-8')) data=sk.recv(1024) print(str(data,'utf-8'))
参考资料:http://www.cnblogs.com/Eva-J/articles/8324837.html
阻塞IO,非阻塞IO,IO多路复用模型的更多相关文章
- IO模型--阻塞IO,非阻塞IO,IO多路复用,异步IO
IO模型介绍: * blocking IO 阻塞IO * nonblocking IO 非阻塞IO * IO multiplexing IO多路复用 * signal driven IO 信号驱动IO ...
- python 全栈开发,Day44(IO模型介绍,阻塞IO,非阻塞IO,多路复用IO,异步IO,IO模型比较分析,selectors模块,垃圾回收机制)
昨日内容回顾 协程实际上是一个线程,执行了多个任务,遇到IO就切换 切换,可以使用yield,greenlet 遇到IO gevent: 检测到IO,能够使用greenlet实现自动切换,规避了IO阻 ...
- {python之IO多路复用} IO模型介绍 阻塞IO(blocking IO) 非阻塞IO(non-blocking IO) 多路复用IO(IO multiplexing) 异步IO(Asynchronous I/O) IO模型比较分析 selectors模块
python之IO多路复用 阅读目录 一 IO模型介绍 二 阻塞IO(blocking IO) 三 非阻塞IO(non-blocking IO) 四 多路复用IO(IO multiplexing) 五 ...
- (IO模型介绍,阻塞IO,非阻塞IO,多路复用IO,异步IO,IO模型比较分析,selectors模块,垃圾回收机制)
参考博客: https://www.cnblogs.com/xiao987334176/p/9056511.html 内容回顾 协程实际上是一个线程,执行了多个任务,遇到IO就切换 切换,可以使用yi ...
- IO阻塞模型、IO非阻塞模型、多路复用IO模型
IO操作主要包括两类: 本地IO 网络IO 本地IO:本地IO是指本地的文件读取等操作,本地IO的优化主要是在操作系统中进行,我们对于本地IO的优化作用十分有限 网络IO:网络IO指的是在进行网络操作 ...
- IO多路复用,同步,异步,阻塞和非阻塞 区别
一.什么是socket?什么是I/O操作? 我们都知道unix(like)世界里,一切皆文件,而文件是什么呢?文件就是一串二进制流而已,不管socket,还是FIFO.管道.终端,对我们来说,一切都是 ...
- IO多路复用,同步,异步,阻塞和非阻塞 区别(转)
转自:http://www.cnblogs.com/aspirant/p/6877350.html?utm_source=itdadao&utm_medium=referral 同步.异步 是 ...
- Python网络编程-IO阻塞与非阻塞及多路复用
前言 问题:普通套接字实现的服务端的缺陷 一次只能服务一个客户端! accept阻塞! 在没有新的套接字来之前,不能处理已经建立连接的套接字的请求 re ...
- Linux设备驱动中的IO模型---阻塞和非阻塞IO【转】
在前面学习网络编程时,曾经学过I/O模型 Linux 系统应用编程——网络编程(I/O模型),下面学习一下I/O模型在设备驱动中的应用. 回顾一下在Unix/Linux下共有五种I/O模型,分别是: ...
- IO模型浅析-阻塞、非阻塞、IO复用、信号驱动、异步IO、同步IO
最近看到OVS用户态的代码,在接收内核态信息的时候,使用了Epoll多路复用机制,对其十分不解,于是从网上找了一些资料,学习了一下<UNIX网络变成卷1:套接字联网API>这本书对应的章节 ...
随机推荐
- AtCoder Grand Contest 032 A - Limited Insertion( 思维)
Time Limit: 2 sec / Memory Limit: 1024 MB Score : 400400 points Problem Statement Snuke has an empty ...
- windows配置nginx实现负载均衡集群 -请求分流
windows配置nginx实现负载均衡集群 一.windows上安装nginx 1.下载nginx的windows版本http://nginx.org/en/download.html 2.把压缩文 ...
- jexus上部署nuget私服vs访问403错误解决方式
因为vs去访问nuget项目的时候是以下面的方式去访问的 http://域名/nuget/Search()?$filter=IsLatestVersion&searchTerm=''& ...
- MongoDB系列:五、MongoDB Driver使用正确的姿势连接复制集
MongoDB复制集(Replica Set)通过存储多份数据副本来保证数据的高可靠,通过自动的主备切换机制来保证服务的高可用.但需要注意的时,连接副本集的姿势如果不对,服务高可用将不复存在. 使用复 ...
- 微信小程序之模板的使用
初步学习小程序模板,就把过程写一下了. 1.在app.json里面注册temlate/public,生成模板wxml,wxss等系列页面 2.注册模板 <1>无数据传参的模板 <te ...
- pjb fabu
#!/bin/bash PyPath=/opt/shell/mysql LocaName=`pwd` bagname=`basename $LocaName` sleep 1s ConfList=`p ...
- 【XSY3345】生成树 并查集
题目大意 有一个两部各有 \(n\) 个节点的二分图 \(G\),定义 \(G^m\) 为一个 \(m+1\) 层的图,每层有 \(n\) 个节点,相邻两层的诱导子图都和 \(G\) 相同. 给你 \ ...
- [AH2017/HNOI2017]大佬
题目描述 人们总是难免会碰到大佬.他们趾高气昂地谈论凡人不能理解的算法和数据结构,走到任何一个地方,大佬的气场就能让周围的人吓得瑟瑟发抖,不敢言语. 你作为一个 OIER,面对这样的事情非常不开心,于 ...
- SNOI 2019 字符串
SNOI 2019 字符串 题目 题解: 解法一: 记一个数组\(f\),\(f[i]=\min_j\ s[j]\neq s[j+1] (j\geq i)\),直接sort即可,复杂度\(O(nlog ...
- django环境部署 crm和路飞学城
环境依赖 yum install gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel ncurses-de ...