• 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 就相当于自报家门然后提交。

  • 相关阅读:
    复制工程或修改工程名字后找不到第三方库解决方法
    描述文件不匹配的解决方法
    JSON Code3840错误
    swift介绍和语言概述
    swift
    新入行程序员应知的十个秘密
    signal SIGABRT
    属性,属性赋值及其内存管理
    HTTP网络请求
    使用类目删除可变字符串中重复字母的一个算法
  • 原文地址:https://www.cnblogs.com/ch2020/p/12805806.html
Copyright © 2020-2023  润新知