# from gevent import spawn,monkey;monkey.patch_all()
# from socket import *
# def server(ip,port):
# server = socket(AF_INET, SOCK_STREAM)
# server.bind((ip,port))
# server.listen(5)
#
# while True:
# conn, addr = server.accept()
# print(addr)
# # ....
# # t=Thread(target=talk,args=(conn,add))
# # t.start()
# spawn(talk,conn,addr)
# def talk(conn,addr):
# while True:
# try:
# data=conn.recv(1024)
# if not data:break
# conn.send(data.upper())
# except ConnectionResetError:
# break
# conn.close()
# if __name__ == '__main__':
# server('127.0.0.1',8080)
# --------------------------------------
# 题目 单线程下的 支持并发
# greenlet gevent 关于线程的
### spwan c产卵的意思 引用的这个monkey 必须放在最前
# yield能实现协程,不过实现过程不易于理解,greenlet是在这方面做了改进。
# greenlet 轻量级的并行编程 gevent封装了很多很方便的接口,其中一个就是monkey
# 服务端的
# from gevent import spawn,monkey;monkey.patch_all() ##patch 补丁 必须放在最前面
# from socket import *
# def server(ip,port):
# server=socket(AF_INET,SOCK_STREAM)
# server.bind((ip,port))
# server.listen(3)
# while True:
# conn,addr = server.accept()
# print(addr)
# spawn(talk,conn,addr)
# def talk(conn,addr):
# while True:
# try:
# data = conn.recv(1024)
# if not data: break
# conn.send(data.upper())
# except ConnectionResetError:
# break
# # conn.close()
# if __name__ == '__main__':
# server('127.0.0.1', 8881)
#
# # 客户端的
# from socket import *
# client = socket(AF_INET,SOCK_STREAM)
# client.connect(('127.0.0.1',8881))
# while True:
# client.send('hello'.encode('utf-8'))
# data = client.recv(1024)
# print(data.decode('utf-8')) # # -----------------------------------------
# io 非阻塞服务端的模型
# from socket import *
# import time
# server = socket(AF_INET,SOCK_STREAM)
# server.bind(('127.0.0.1',8888))
# server.listen(3)
# server.setblocking(False) ##本身是阻塞的 但是参数为错 所以为非阻塞的意思
# conn_l =[]
# while True:
# try : ### 主要就是收集链接的任务
# conn,addr = server.accept()
# conn_l.append(conn) ##收到客户端的链接 地址 ,把链接放到列表里
# print(addr)
#
# except BlockingIOError: ##报错异常 没有链接 就会出现 主要的任务就是在收集链接的空闲
# ##去干通信的任务,消除io的等待
# print('没有接收链接,干点别的事')
# del_l=[]
# for conn in conn_l:
# try:
# data = conn.recv(1024)
# if not data:
# conn.close()
# del_l.append(conn)
# continue
# conn.send(data.upper())
# except BlockingIOError:
# pass
# except ConnectionResetError:
# conn.close()
# del_l.append(conn)
# for conn in del_l:
# conn_l.remove(conn) ####注意 原来的列表 不能直接删除元素 但是元列表在完成后 可以循环另一个列表的元素就删除掉
# ---------------------------
# io 多路复用的 引用selet 里面有三个列表 读写x
from socket import *
import time
import select
server = socket(AF_INET,SOCK_STREAM)
server.bind(('127.0.0.1',8880))
server.listen(2)
server.setblocking(False)## 设置为io复用
read_l=[server,]
print('starting')
while True:
r1,w1,x1 = select.select(read_l,[],[])
## 此时 r1就是read_l
for r in rl:
if r is server:
conn,addr = rl[0].accept()
print(addr)
read_l.append(conn)
else:
try:
data = r.recv(1024)
if not data:
r.close()
read_l.remove(r)
continue
r.send(data.upper())
except ConnectionResetError:
r.close()
read_l.remove(r)

day 36 关于io模型的问题 阻塞 和多路复用的更多相关文章

  1. Python之阻塞IO模型与非阻塞IO模型

    Python之阻塞IO模型与非阻塞IO模型 IO模型 1 阻塞IO: 全程阻塞 2 非阻塞IO: 发送多次系统调用: 优点:wait for data时无阻塞 缺点:1 系统调用太多 2 数据不是实时 ...

  2. 36、IO模型与socketserver实现并发

    特别声明本随笔copy于egon(林海峰). 一 IO模型介绍 为了更好地了解IO模型,我们需要事先回顾下:同步.异步.阻塞.非阻塞 同步(synchronous) IO和异步(asynchronou ...

  3. IO模型之非阻塞IO

    1. IO模型非阻塞 IO Linux下,可以通过设置socket使其变为 non-blocking.当对一个non-blocking socket执行读操作时,流程是这个样子: 从图中可以看出,当用 ...

  4. python并发编程之IO模型 同步 异步 阻塞 非阻塞

    IO浅谈 首先 我们在谈及IO模型的时候,就必须要引入一个“操作系统”级别的调度者-系统内核(kernel),而阻塞非阻塞是跟进程/线程严密相关的,而进程/线程又是依赖于操作系统存在的,所以自然不能脱 ...

  5. IO模型,非阻塞IO模型,select实现多路复用

    1. IO阻塞模型 IO问题: 输入输出 我要一个用户名用来执行登陆操作,问题用户名需要用户输入,输入需要耗时, 如果输入没有完成,后续逻辑无法继续,所以默认的处理方式就是 等 将当前进程阻塞住,切换 ...

  6. python全栈开发,Day44(IO模型介绍,阻塞IO,非阻塞IO,多路复用IO,异步IO,IO模型比较分析,selectors模块,垃圾回收机制)

    昨日内容回顾 协程实际上是一个线程,执行了多个任务,遇到IO就切换 切换,可以使用yield,greenlet 遇到IO gevent: 检测到IO,能够使用greenlet实现自动切换,规避了IO阻 ...

  7. 转:IO模型-- 同步和阻塞,异步和非阻塞的区别

    源地址 http://hi.baidu.com/deep_pro/item/db0c581af1c1f17e7b5f2534 这些词之间的区别难倒了很多人,还有什么同步阻塞, 同步非阻塞, 异步阻塞, ...

  8. 简述linux同步与异步、阻塞与非阻塞概念以及五种IO模型

    1.概念剖析 相信很多从事linux后台开发工作的都接触过同步&异步.阻塞&非阻塞这样的概念,也相信都曾经产生过误解,比如认为同步就是阻塞.异步就是非阻塞,下面我们先剖析下这几个概念分 ...

  9. {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) 五 ...

随机推荐

  1. Tree总结

    树结构问题因为容易写出解法,因此经常出现在面试题中 1. 树的种类 1) Tree 2) Binary Trees 3) Binary Search Trees(BST) : used to sort ...

  2. 『C++』基础知识点

    一.基础知识 1.C++编译流程 以Unix系统编译中间文件为说明: .cpp—(编译预处理)—>.ii—(编译)—>.s—(汇编)—>.o—(ld,连接)—>.out 2.# ...

  3. spring boot(十一)MongoDB的使用

    mongodb是最早热门非关系数据库的之一,使用也比较普遍,一般会用做离线数据分析来使用,放到内网的居多.由于很多公司使用了云服务,服务器默认都开放了外网地址,导致前一阵子大批 MongoDB 因配置 ...

  4. 向java高级工程师和项目经理的道路进发【转】

    转自https://www.cnblogs.com/ahudyan-forever/p/5263296.html 宏观 一. JAVA.要想成为JAVA(高级)工程师肯定要学习JAVA.一般的程序员或 ...

  5. Windows下dump文件生成与分析

    一.    生成Dump文件方式 1.1任务管理器 在程序崩溃后,先不关闭程序,在任务管理器中找到该程序对应的进程.右键—>创建转储文件. 此时会在默认的目录下创建出一个dump文件. 可以看出 ...

  6. WDA基础十二:FREE PROGRAM SH (WDA TREE)

    一个需要用TREE展示搜索帮助的需求: 1.创建WDA程序:ZCATEGORY 2.Component Controller中添加节点: (说明,此节点仅在搜索帮助程序中使用,可以不用interfac ...

  7. [CodeForces - 197D] D - Infinite Maze

    D - Infinite Maze We've got a rectangular n × m-cell maze. Each cell is either passable, or is a wal ...

  8. Hadoop---Java-API对HDFS的操作

    Java-API对HDFS的操作 哈哈哈哈,深夜来一波干货哦!!! Java-PAI对hdfs的操作,首先我们建一个maven项目,我主要说,我们可以通过Java代码来对HDFS的具体信息的打印,然后 ...

  9. php-fpm占用cpu和内存过高100% 解决办法

    参考网站: https://www.fujieace.com/php/php-fpm.html https://www.fujieace.com/php/pm-max_children-2.html ...

  10. Linux五种IO模型(同步 阻塞概念)

    Linux五种IO模型 同步和异步 这两个概念与消息的通知机制有关. 同步 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回.比如,调用readfrom系统调用时,必须等待IO操 ...