阻塞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>这本书对应的章节 ...
随机推荐
- SpringMVC 实现文件上传与下载,并配置异常页面
目录 上传文件的表单要求 Spring MVC实现上传文件 需要导入的jar包 配置MultipartResolver解析器 编写接收上传文件的控制器 Spring MVC实现文件下载 下载文件时的h ...
- .netcore2.0发送邮件
SmtpClient smtpClient = new SmtpClient(); smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;//指 ...
- Django在根据models生成数据库表时报 __init__() missing 1 required positional argument: 'on_delete'
from django.db import models # Create your models here. class Category(models.Model): caption = mode ...
- js作用域零碎的知识点,不同的script块,虽然同是全局变量
如下代码,第一次弹出a,因为解析器里找到var a,赋予a变量undefined,弹出undefined <!DOCTYPE html> <html> <head> ...
- Docker 案例: 在容器中部署静态网站
----------------知识点------------ 容器的端口映射: docker run [-P] [-p] -P,–publish-all=true | false,大写的P表示为 ...
- 解决使用Spring Boot、Multipartfile实现上传提示无法找到文件的问题
前言 SpringBoot使用MultiPartFile接收来自表单的file文件,然后进行服务器的上传是一个项目最基本的需求,我以前的项目都是基于SpringMVC框架搭建的,所以在使用Spring ...
- CountDownLatch、CyclicBarrier和Semaphore基本原理和使用
一.CountDownLatch CountDownLatch类位于java.util.concurrent包下,利用它可以实现类似计数器的功能. 比如有一个任务A,它要等待其他4个任务执行完毕之后才 ...
- OpenJudge-bailian 3454 秦腾与教学评估
http://bailian.openjudge.cn/practice/3454?lang=en_US 题目 在秦腾进入北京大学学习的第一个学期,就不幸遇到了前所未有的教学评估.在教学评估期间,同学 ...
- oracle wm_concat 函数无法使用的情况下,使用LISTAGG()函数
http://dacoolbaby.iteye.com/blog/1698957 --20180327 重写wm_concat函数,解决行数超过上限问题 /*执行前请将APPS替换为当前登录用户*/ ...
- Oracle 12c CDB PDB 安装/配置/管理
Oracle安装参考:https://www.cnblogs.com/zhichaoma/p/9288739.html 对于CDB,启动和关闭与之前传统的方式一样,具体语法如下: STARTU ...