zoukankan      html  css  js  c++  java
  • 协程

    1 IO多路复用

    作用:IO多路复用的作用是检测多个soket是否已经发生变化(是否已经连接成功,是否已经获取数据)(可读/可写)

    操作系统检测soket是否发生变化的三种模式:

    select:最多有1024个soket,循环去检测

    poll:不限制监听的soket个数,循环去检测(水平触发)

    epoll:不限制监听soket个数,回调方式(边缘触发)

    python模块:select.select  select.epoll

     1 import socket
     2 import select
     3 client1=socket.socket()
     4 client1.setblocking(False)
     5 try:
     6     client1.connect(('www,baidu.com',80))
     7 except BlockingIOError as e:
     8     pass
     9 client2=socket.socket()
    10 client2.setblocking(False)
    11 try:
    12     client2.connect(('www.sogou.com',80))
    13 except BlockingIOError as e:
    14     pass
    15 
    16 socket_list=[client1,client2]
    17 conn_list=[client1,client2]
    18 
    19 while True:
    20     rlist,wlist,elist=select.select(socket_list,conn_list,[],0.005)  #relsit种有值表示有返回的数据(可读)
    21     #  wlist有值表示已经连接成功(可写),elist表示是否有异常,有异常则放里面,0.005表示的是每测一次最多花0.005
    22     for sk in wlist:  #表示wlist种有值,即表示连接成功
    23         if sk==client1:
    24             sk.sendall(b'GET /s?wd=alex HTTP/1.0
    host:www.baidu.com
    
    ')
    25         else:
    26             sk.sendall(b'GET /s?wd=alex HTTP/1.0
    host:www.sogou.com
    
    ')
    27         conn_list.remove(sk)   #表示将连接成功的数据剔除,已经连接过了,不用再次连接。
    28 
    29     for sk in rlist:#表示rlist种有值,有返回的数据
    30         chun_list=[]  #将返回的数据放到列表中
    31         while True:
    32             try:
    33                 chun=sk.recv(1024)
    34                 if not chun: #表示接收到的数据已经接收完,没有数据可接收了
    35                     break
    36                 chun_list.append(chun)  #有数据的话 将数据放入到列表中
    37             except BlockingIOError as e:
    38                 break
    39         body=b''.join(chun_list)  #将列表中的数据以字节的形式展现出来
    40         print('________>',body)
    41         sk.close()
    42         socket_list.remove(sk)
    43     if not socket_list:
    44         break
    View Code
  • 相关阅读:
    Web 开发基础之JavaScript
    WEB框架之-Django入门
    JQuery
    Web 开发基础之CSS
    Django simple_tag,filte,分页以及cookie和装饰器
    Django进阶之CSRF
    Django进阶之session
    继续Django
    VS Code快捷键
    前端:文件下载功能
  • 原文地址:https://www.cnblogs.com/mlhz/p/9641972.html
Copyright © 2011-2022 走看看