zoukankan      html  css  js  c++  java
  • select

    触发方式

    1.水平触发    

    2.边缘触发

    3.IO多路复用的优势:同时可以监听多个连接

    边缘触发案例:

     1 import socket,select
     2 
     3 tcp_server = socket.socket()
     4 tcp_server.bind(('127.0.0.1',8080))
     5 tcp_server.listen(25)
     6 inp = [tcp_server,]
     7 while True:
     8     r,w,p = select.select([tcp_server,],[],[],1)
     9     for i in r:
    10         # conn,addr = i.accept()
    11         # data = conn.recv(1024)
    12         # print(data.decode())
    13         print('hello')
    14         # inp.append(conn)
    15     print('.................')
     1 tcp_server = socket.socket()
     2 tcp_server.bind(('127.0.0.1',8080))
     3 tcp_server.listen(5)
     4 inp = [tcp_server,]
     5 while True:
     6     r,w,p = select.select(inp,[],[],5)
     7     for i in r:
     8         if i == tcp_server:
     9             conn,addr = i.accept()
    10             print(conn)
    11             inp.append(conn)
    12         else:
    13             data = i.recv(1024)
    14             print(data.decode())
    15             a = input('给%s返回的信息:'%inp.index(i))
    16             i.sendall(a.encode())
    17     print('goiing......')

    改进版

     1 import socket,select,threading
     2 
     3 tcp_server = socket.socket()
     4 tcp_server.bind(('127.0.0.1',8080))
     5 tcp_server.listen(5)
     6 inp = [tcp_server,]
     7 def send(i):
     8     data = i.recv(1024)
     9     print(data.decode())
    10     a = input('给%s返回的信息:' % inp.index(i))
    11     i.sendall(a.encode())
    12 
    13 while True:
    14     r,w,p = select.select(inp,[],[],5)
    15     for i in r:
    16         if i == tcp_server:
    17             conn,addr = i.accept()
    18             print(conn)
    19             inp.append(conn)
    20         else:
    21             t = threading.Thread(target=send,args=(i,))
    22             t.start()
    23     print('goiing......')

    select   就相当于一个班级,40个人同时工作,当有一个人工作完了提交,就拍一下桌子,那么老师就知道有人写完了,但是不知道是哪一个,就得一个一个的去问。

    epoll 就相当于自报家门然后提交。

  • 相关阅读:
    http工作流程
    HTTP的响应码?
    原型链
    ubuntu查看IO
    ubuntu14.04 64位 安装H3C iNode客户端
    关于ubuntu14.04LTS 64位 播放优酷视频
    python 的字符串驻留机制
    【转】使用virtualenv在ubuntu上搭建python 3开发环境
    ubuntu14.04 python2.7 安装配置OpenCV3.0
    记录两个折磨了我三天的低级错误
  • 原文地址:https://www.cnblogs.com/ch2020/p/12805806.html
Copyright © 2011-2022 走看看