码迷,mamicode.com
首页 > 编程语言 > 详细

python---IO多路复用

时间:2016-07-23 20:56:07      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:

这里的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)   #表示客户端发送了数据
View Code

 

客户端

技术分享
#!/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()
View Code

 

python---IO多路复用

标签:

原文地址:http://www.cnblogs.com/zhoufeng1989/p/5699378.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!