zoukankan      html  css  js  c++  java
  • python学习第三十三节(IO模型)

    windows由于新建进程会从新赋值一份内存空间,将本页重新加载一遍,if下面这些内容不能重新加载,否则就再次创建进程了,所以需要if__name__=='__main__'

     

     

     阻塞 IO,即读写数据时,需要等待操作完成,才能继续执行。进阶的做法就是用多线程来处理需要 IO 的部分,缺点是开销会有些大。

     非阻塞 IO,即读写数据时,如果暂时不可读写,则立刻返回,而不等待。因为不知道什么时候是可读写的,所以轮询时可能会浪费 CPU 时间。

     

     

     

    IO多路复用:
    select 监听机制通过轮训,看是否有变化,将有变化的提出来。
    poll

    epoll 推荐

    import selectors, socket
    
    sel = selectors.DefaultSelector()#实例化一个对象
    
    sock = socket.socket()#创建一个socket对象
    sock.bind(("0.0.0.0", 9997))
    sock.listen(5)
    sock.setblocking(False)#非阻塞IO
    
    
    def read(conn, mask):#创建一个函数read,传进参数conn
        data = conn.recv(1024)
        print(data.decode("utf8"))
        resp = input(">>>>>")
        conn.send(resp.encode("utf8"))
    
    
    def accept(sock, mask):
        conn, addr = sock.accept()#将接受到的accept赋值
        sel.register(conn, selectors.EVENT_READ, read)
        #注册conn,一旦客户端发来消息内容将触发函数read
    
    
    # 绑定套接字对象和函数
    sel.register(sock, selectors.EVENT_READ, accept)
    #注册sock,如果有新链接将会触发,执行绑定函数accept
    
    while 1:
    
        events = sel.select()  # 监听触发的内容,如果是sock,将列表所以赋值给events
    
        for key, mask in events:#循环遍历这个列表(列表一共两个内容,0是个对象,1是mask)
            callback = key.data
            #取出对象的data方法,如果是sock对象方法就是注册时候的accept,如果是conn就是read
    
            callback(key.fileobj, mask)
            #执行这个方法,并传参数conn进去
    

      

  • 相关阅读:
    ER图
    uml图
    第一个迭代任务的制作
    软件测试
    实训记录
    UML系列图——ER图
    UML系列图——用例图
    第一个迭代任务进度
    第一个迭代任务
    需求分析——WBS
  • 原文地址:https://www.cnblogs.com/ArmoredTitan/p/7250623.html
Copyright © 2011-2022 走看看