• python基础一 day41 IO模型 非阻塞IO


    # 同步 提交一个任务之后要等待这个任务执行完毕
    # 异步 只管提交任务,不等待这个任务执行完毕就可以做其他事情
    # 阻塞 recv recvfrom accept
    # 非阻塞

    # 阻塞 线程 运行状态 --> 阻塞状态 --> 就绪
    # 非阻塞

    # IO多路复用
    # select机制 Windows linux 都是操作系统轮询每一个被监听的项,看是否有读操作
    # poll机制 linux 它可以监听的对象比select机制可以监听的多
    # 随着监听项的增多,导致效率降低
    # epoll机制 linux

     server:

    import socket
    sk = socket.socket()
    sk.bind(('127.0.0.1',9000))
    sk.setblocking(False)
    sk.listen()
    conn_l = []
    del_conn = []
    while True:
        try:
            conn,addr = sk.accept()  #不阻塞,但是没人连我会报错
            print('建立连接了:',addr)
            conn_l.append(conn)
        except BlockingIOError:
            for con in conn_l:
                try:
                    msg = con.recv(1024)  # 非阻塞,如果没有数据就报错
                    if msg == b'':
                        del_conn.append(con)
                        continue
                    print(msg)
                    con.send(b'byebye')
                except BlockingIOError:pass
            for con in del_conn:
                con.close()
                conn_l.remove(con)
            del_conn.clear()
    
    # while True : 10000   500  501

    client:

    import time
    import socket
    import threading
    def func():
        sk = socket.socket()
        sk.connect(('127.0.0.1',9000))
        sk.send(b'hello')
        time.sleep(1)
        print(sk.recv(1024))
        sk.close()
    
    for i in range(2):
        threading.Thread(target=func).start()

    如果一个列表是空的,for循环是不会执行的

  • 相关阅读:
    C++程序设计实验-3
    函数
    C++简单程序设计
    C++程序设计实验-2
    C++程序设计实验-1
    项目总结
    团队测试计划
    第二阶段团队绩效评分
    第二阶段scrum-10
    第二阶段scrum-9
  • 原文地址:https://www.cnblogs.com/wang-tan/p/11456141.html
Copyright © 2020-2023  润新知