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

python-IO多路复用,select模块

时间:2018-06-16 10:31:01      阅读:206      评论:0      收藏:0      [点我收藏+]

标签:end   byte   poll   监听   sele   send   过程   127.0.0.1   strong   

触发机制:1)水平触发;2)边缘触发

IO多路复用单线程实现并发,实现模块:1)select(效率最低); 2)poll;3)epoll(最好,nginx的实现)。linux下有这3种模块,windows下只有select模块

IO多路复用的好处:同时可以监听多个连接

IO多路复用的select模块触发机制:水平触发

PS:异步:整个过程中,不能有一丝的阻塞

client端:

import socket

sk = socket.socket()
sk.connect((127.0.0.1, 8801))

while True:
    inp = input(">>>>")
    sk.sendall(bytes(inp, "utf8"))
    data = sk.recv(1024)
    print(str(data, utf8))

server端:

import socket
import select
sk=socket.socket()
sk.bind(("127.0.0.1",8801))
sk.listen(5)
inputs=[sk,]
while True:
    r,w,e=select.select(inputs,[],[],5)

    for obj in r:#[sk,]
        if obj==sk:
            conn,add=obj.accept()
            print(conn)
            inputs.append(conn)
        else:
            data_byte=obj.recv(1024)
            print(str(data_byte,utf8))
            inp=input(回答%s号客户>>>%inputs.index(obj))
            obj.sendall(bytes(inp,utf8))

    print(>>,r)

 

python-IO多路复用,select模块

标签:end   byte   poll   监听   sele   send   过程   127.0.0.1   strong   

原文地址:https://www.cnblogs.com/benchdog/p/9189647.html

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