python---IO多路复用
这里的IO是指网络IO
python中通过select模块实现IO多路复用,select模块中有select、poll、epoll等方法
下面例子以select模块实现IO多路复用
仅仅只有IO多路复用只能实现伪并发
服务器端
#!/usr/bin/env python
# -*- coding:utf-8 -*-
__author__ = 'zhoufeng'
import socket
import select
sk=socket.socket()
sk.bind(('127.0.0.1',9999,))
sk.listen(5)
inputs=[sk,] #监听的对象
while True:
# rlist中元素是socket对象
# 监听sk(服务器端)对象,如果sk对象发生变化,表示有客户端来连接了,此时rlist值为[sk]
# 监听conn对象,如果conn发生变化,表示客户端有新消息发送过来了,此时rlist的值为 [客户端]
rlist,w,e=select.select(inputs,[],[],1)
#print(rlist)
print(len(inputs),len(rlist))
for r in rlist: #如果rlist列表为空,此for循环不会执行
if r==sk: #表示有新的客户端来连接
#print(r)
conn,addr=r.accept() #为新的客户端创建conn对象
inputs.append(conn) #将新的conn对象放到inputs中
conn.sendall(bytes('hello',encoding='utf-8'))
else:
r.recv(1024) #表示客户端发送了数据
客户端
#!/usr/bin/env python
# -*- coding:utf-8 -*-
__author__ = 'zhoufeng'
import socket
import select
sk=socket.socket()
sk.connect(('127.0.0.1',9999,))
data=sk.recv(1024)
print(data)
while True:
inp=input('>>>')
sk.sendall(bytes(inp,encoding='utf-8'))
sk.close()
python---IO多路复用的更多相关文章
- Python——IO多路复用之select模块epoll方法
Python——IO多路复用之select模块epoll方法 使用epoll方法实现IO多路复用,使用方法基本与poll方法一致,epoll效率要高于select和poll. .├── epoll_c ...
- Python——IO多路复用之select模块poll方法
Python——IO多路复用之select模块poll方法 使用poll方法实现IO多路复用 .├── poll_client.py├── poll_server.py└── settings.py ...
- Python——IO多路复用之select模块select方法
Python——IO多路复用之select模块select方法 使用select模块的select方法实现Python——IO多路复用 实现同时将终端输入的文本以及客户端传输的文本写入文本文件中: w ...
- Python IO 多路复用 \协程
IO 多路复用 作用: 检测多个socket是否已经发生变化(是否已经连接成功/是否已经获取数据) 即(可读/可写) IO请求时 解决并发 : 单线程 def get_data(key): cl ...
- python IO 多路复用
一.epoll epoll 参考链接: https://www.cnblogs.com/Alanpy/articles/5125986.html epoll 参考链接: https://www.cn ...
- Python IO多路复用select模块
多路复用的分析实例:服务端.客户端 #服务端配置 from socket import * import time import select server = socket(AF_INET, SOC ...
- python IO多路复用版FTP
需求: 实现文件上传及下载功能 支持多连接并发传文件 使用select or selectors
- Python(七)Socket编程、IO多路复用、SocketServer
本章内容: Socket IO多路复用(select) SocketServer 模块(ThreadingTCPServer源码剖析) Socket socket通常也称作"套接字" ...
- python中的IO多路复用
在python的网络编程里,socetserver是个重要的内置模块,其在内部其实就是利用了I/O多路复用.多线程和多进程技术,实现了并发通信.与多进程和多线程相比,I/O多路复用的系统开销小,系统不 ...
- socket_server源码剖析、python作用域、IO多路复用
本节内容: 课前准备知识: 函数嵌套函数的使用方法: 我们在使用函数嵌套函数的时候,是学习装饰器的时候,出现过,由一个函数返回值是一个函数体情况. 我们在使用函数嵌套函数的时候,最好也这么写. def ...
随机推荐
- cuda-convnet windows8下编译
编译环境: windows8.1 Anaconda python2.7 Visual studio 2012 CUDA6.0 Pthread for windows Intel Math Kernel ...
- 判断Activity是否正在退出 isFinishing()
boolean android.app.Activity.isFinishing() Added in API level 1 Check to see whether this ...
- Date和Calendar时间操作常用方法及示例
package test; import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date; /** ...
- windows使用nginx实现网站负载均衡测试实例
如果你关注过nginx,必定知道nginx这个软件有什么用的,如果你的网站访问量越来越高,一台服务器已经没有办法承受流量压力,那就增多几台服务器来做负载吧.做网站负载可以买硬件设备来实现,比如F5,不 ...
- 修改eclipse中包的显示结构为树形
- webUploader react 接口设计
import React, {PropTypes} from 'react'; export default class Test extends React.Component { construc ...
- sqlserver2008 创建定时任务
SQL2008如何创建定时作业?此方法也适应于Sql Server2005数据库,有兴趣的可以来看下! 1.打开[SQL Server Management Studio],在[对象资源管理器]列表中 ...
- sqlServer 2008修改字段类型和重命名字段名称的sql语句
sqlServer 2008修改字段类型和重命名字段名称的sql语句 //修改字段的类型 alter table fdi_news alter column c_author nvarchar(50) ...
- 【VB6】VB6实现拖拽
首先,设置OLEDropMode OLEDropMode = 1 然后插入代码 Private Sub 控件名_OLEStartDrag(Data As DataObject, AllowedEffe ...
- Mysql使用workbench迁移数据
原文:http://jingyan.baidu.com/article/925f8cb8f3ec25c0dce05644.html 打开Mysql WorkBench,连接到数据库: 首先选中:Man ...