• 非阻塞io模型,阻塞io模型


    非阻塞io模型
    import socket
    import time

    server=socket.socket()
    server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
    server.bind(('127.0.0.1',8083))
    server.listen(5)

    server.setblocking(False) #设置不阻塞
    r_list=[] #用来存储所有来请求server端的conn连接
    w_list={} #用来存储所有已经有了请求数据的conn的请求数据

    while 1:
    try:
    conn,addr=server.accept() #不阻塞,会报错
    r_list.append(conn) #为了将连接保存起来,不然下次循环的时候,上一次的连接就没有了
    except BlockingIOError:
    # 强调强调强调:!!!非阻塞IO的精髓在于完全没有阻塞!!!
    # time.sleep(0.5) # 打开该行注释纯属为了方便查看效果
    print('在做其他的事情')
    # print('rlist: ',len(r_list))
    # print('wlist: ',len(w_list))


    # 遍历读列表,依次取出套接字读取内容
    del_rlist=[] #用来存储删除的conn连接
    for conn in r_list:

    try:
    data=conn.recv(1024) #不阻塞,会报错
    if not data: #当一个客户端暴力关闭的时候,会一直接收b'',别忘了判断一下数据
    conn.close()
    del_rlist.append(conn)
    continue
    w_list[conn]=data.upper()


    except BlockingIOError: # 没有收成功,则继续检索下一个套接字的接收
    continue
    except ConnectionResetError: # 当前套接字出异常,则关闭,然后加入删除列表,等待被清除
    conn.close()
    del_rlist.append(conn)


    # 遍历写列表,依次取出套接字发送内容
    del_wlist=[]
    for conn,data in w_list.items():
    try:
    conn.send(data)
    del_wlist.append(conn)
    except BlockingIOError:
    continue


    # 清理无用的套接字,无需再监听它们的IO操作
    for conn in del_rlist:
    r_list.remove(conn)
    #del_rlist.clear() #清空列表中保存的已经删除的内容
    for conn in del_wlist:
    w_list.pop(conn)
    #del_wlist.clear()


    #非阻塞io模型
    import socket
    import time

    server=socket.socket()
    server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
    server.bind(('127.0.0.1',8083))
    server.listen(5)
    print('你看看卡在哪')
    server.setblocking(False)
    while 1:
    try:
    conn, addr = server.accept()
    print('来自%s的链接请求'%addr)
    except BlockingIOError:
    print('去买点药')
    time.sleep(0.1)

  • 相关阅读:
    ps 允许执行不信任的脚本
    mysql 某表某列支持 emoji
    jenkins
    成为真正的win10 超级管理员,解决win+r 不以管理员身份运行
    bat curl 定时请求
    jq 日期区间处理
    jq 日期区间处理
    ubuntu cli
    nginx启动两个flask项目
    nginx 配置http和https验证
  • 原文地址:https://www.cnblogs.com/li-123-peng/p/9877059.html
Copyright © 2020-2023  润新知