一、select模块

  • Python select socket server代码示例
# Author:Li Dongfei
import select, socket, sys, queue
server = socket.socket()
server.bind(('localhost', 9000))
server.listen(1000)
server.setblocking(False) #设置为非阻塞 msg_dic = {}
inputs = [server,]
outputs = [] while True:
readable, writeable, exceptional = select.select(inputs, outputs, inputs)
print(readable,writeable,exceptional)
for r in readable:
if r is server:
conn, addr = server.accept()
print("new connect", addr)
inputs.append(conn)
msg_dic[conn] = queue.Queue()
else:
data = r.recv(1024)
print("recv data",data)
msg_dic[r].put(data)
outputs.append(r) for w in writeable:
data_to_clinet =msg_dic[w].get()
w.send(data_to_clinet)
outputs.remove(w) for e in exceptional:
if e in outputs:
outputs.remove(e)
inputs.remove(e)
del msg_dic[e]

二、selector模块

# Author:Li Dongfei
import selectors, socket sel = selectors.DefaultSelector() def accept(sock, mask):
conn, addr = sock.accept()
print('accepted', conn, 'from', addr)
conn.setblocking(False)
sel.register(conn, selectors.EVENT_READ, read) def read(conn, mask):
data = conn.recv(1024)
if data:
print('echoing', repr(data), 'to', conn)
conn.send(data)
else:
print('closing', conn)
sel.unregister(conn)
conn.close() sock = socket.socket()
sock.bind(('localhost', 9000))
sock.listen(1000)
sock.setblocking(False)
sel.register(sock, selectors.EVENT_READ, accept) while True:
events = sel.select()
for key, mask in events:
callback = key.data
callback(key.fileobj, mask)

190707select和selector模块的更多相关文章

  1. 读Zepto源码之Selector模块

    Selector 模块是对 Zepto 选择器的扩展,使得 Zepto 选择器也可以支持部分 CSS3 选择器和 eq 等 Zepto 定义的选择器. 在阅读本篇文章之前,最好先阅读<读Zept ...

  2. selector 模块

    selector 模块进行自动匹配,当是windows系统时,自动匹配select, linux系统时,自动匹配epoll,传输时会明确告诉内核响应服务器的地址,速度要更快 import select ...

  3. python基础(17)-IO模型&selector模块

    先说一下IO发生时涉及的对象和步骤.对于一个network IO (这里我们以read举例),它会涉及到两个系统对象,一个是调用这个IO的process (or thread),另一个就是系统内核(k ...

  4. selector模块

    selector selectors模块,此模块允许高级和高效的I / O多路复用,构建在select模块原语上.鼓励用户使用此模块,除非他们需要精确控制所使用的操作系统级原语.( 默认使用epoll ...

  5. python使用selector模块编写FTP

    server import os import socket import time import selectors BASE_DIR = os.path.dirname(os.path.abspa ...

  6. selector模块使用

    #服务端 from socket import * import selectors sel=selectors.DefaultSelector() def accept(server_fileobj ...

  7. RequireJS入门之二——第二例(写自己的模块)

    第一节遗留的问题: 中文乱码:  修改require.js文件,搜索charset 关键字,修改为GBK:(貌似乱不乱码和jquery版本有问题,切换GBK和utf-8!!) 路      径:  仅 ...

  8. 读Zepto源码之Touch模块

    大家都知道,因为历史原因,移动端上的点击事件会有 300ms 左右的延迟,Zepto 的 touch 模块解决的就是移动端点击延迟的问题,同时也提供了滑动的 swipe 事件. 读 Zepto 源码系 ...

  9. 读Zepto源码之Gesture模块

    Gesture 模块基于 IOS 上的 Gesture 事件的封装,利用 scale 属性,封装出 pinch 系列事件. 读 Zepto 源码系列文章已经放到了github上,欢迎star: rea ...

随机推荐

  1. Ubuntu下更新Pycharm时权限不够(PyCharm does not have write access to...)

    问题描述 更新Pycharm时,出现如下问题 PyCharm does not have write access to /usr/local/software/pycharm-2019.1.3. P ...

  2. HDU-4717 The Moving Points(凸函数求极值)

    The Moving Points Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  3. 洛谷 - P3469 - BLO-Blockade - 割点

    https://www.luogu.org/problem/P3469 翻译:一个原本连通的无向图,可以删除图中的一个点,求因为删除这个点所导致的不连通的有序点对的数量.或者说,删去这个点之后,各个连 ...

  4. css 空心圆

    用css实现一个空心圆,并始终放置在浏览器窗口左下角        div{                position:fixed;                bottom:0;      ...

  5. php获取某经纬度附近地点位置

    最近在做小程序中 其中一个需求就是要到找出某个经纬度地点附近的位置 本质最终的目的就是确定以某个确定的经纬度地点,以某半径画圆形确定的4个点对应的经纬度 /** * [returnSquarePoin ...

  6. 雪花算法生成ID

    前言我们的数据库在设计时一般有两个ID,自增的id为主键,还有一个业务ID使用UUID生成.自增id在需要分表的情况下做为业务主键不太理想,所以我们增加了uuid作为业务ID,有了业务id仍然还存在自 ...

  7. jmeter之HTTP信息管理器、正则表达式联合使用(获取登录session

    如图所示,信息管理头的信息为请求头信息,如图所示 注意事项:1)body date里面的参数要是要注意英文编写条件下,可以通过https://www.json.cn/在线的json格式刷格式 2)注意 ...

  8. mysql远程不能连接问题

    解决Navicat无法连接到腾讯云MySQL的问题 工具/原料   Navicat phpstudy 腾讯云 Xshell6 方法/步骤   1 1.首先远程连接进入服务器,在cmd中输入mysql ...

  9. 3D绘图计算器(geogebra[5.0.385.0])使用QQ浏览器打开下载

    点击这里下载3D绘图计算器

  10. ASP教程:gb2312和utf-8乱码问题解决

    文章为转载:https://www.xp.cn/b.php/31663.html 尊重作者版权 今天做网站的时候,客户要一个博客,于是就利用了本博客所用的程序pjblog.经常做网站的人都知道,在同一 ...