阻塞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>这本书对应的章节 ...
随机推荐
- Android Studio自定义注释模板
一.自定义新建文件时生成的注释 setting->Editor->File and Code Templates->Includes->File Header,在这里输入自定义 ...
- codeforces#1152D. Neko and Aki's Prank(dp)
题目链接: https://codeforces.com/contest/1152/problem/D 题意: 给出一个$n$,然后在匹配树上染色边,每个结点的所有相邻边只能被染色一次. 问,这颗树上 ...
- Namespace讨论
我们需要讨论一个深层次的问题: 为什么不直接在 tape17162c5-00 和 tapd568ba1a-74 上配置 Gateway IP,而是引入一个 namespace,在 namespace ...
- Pairwise 找到你的另一半
都说优秀的程序员擅长面向对象编程,但却经常找不到另一半,这是为什么呢?因为你总是把自己局限成为一个程序员,没有打开自己的思维. 这是一个社群的时代啊,在这里你应该找到与你有相同价值观但又互补的另一半. ...
- PHP开发高可用高安全App后端
基于thinkphp5开发的APP,涵盖阿里大于,七牛云图片上传,RestfulApi,短信验证, 需要联系我:QQ:1844912514
- 【HTTP】http协议一些重要的知识点
一. HTTP状态码是用以表示网页服务器HTTP响应状态的3位数字代码.所有状态码的第一个数字代表了响应的五种状态之一.当用户试图通过HTTP或FTP协议访问一台运行主机上的内容时,Web服务器返回一 ...
- 当PsychicBoom_发觉自己是个大SB的时候……
这些题都是没ac调了好久发现是sb错误的题--. 想清楚再写题!!! 2019.4.18 洛谷P5155 [USACO18DEC]Balance Beam 转移方程\((a[l[i]]*(r[i]-i ...
- 文件上传XSS引发的安全问题
文件上传xss,一般都是上传html文件导致存储或者反射xss 一般后缀是html,之前疏忽了,没怎么考虑文件上传xss 如果没有 验证文件内容,却验证了后缀的情况下,使用: htm后缀: 测试代码: ...
- Cucumber语法格式
@login Feature: Login @T1 Scenario: Login with correct credentail Given I open login page When I ent ...
- 内核空间内存申请函数kmalloc kzalloc vmalloc的区别
我们都知道在用户空间动态申请内存用的函数是 malloc(),这个函数在各种操作系统上的使用是一致的,对应的用户空间内存释放函数是 free().注意:动态申请的内存使用完后必须要释放,否则会造成内存 ...