zoukankan      html  css  js  c++  java
  • 第十七节 单进程、单线程、非堵塞实现并发验证

    import socket
    
    '''
    用来验证协程的实现原理,除了多进程是直接进行多个任务进行,多线程和多线程的本质都是运用阻塞时间处理其他数据
    进程是并行的,真正的同时运行;线程和协程是并发的,是运用间隔时间轮流调用
    '''
    
    tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    tcp_socket.bind(('', 8080))
    tcp_socket.listen(128)
    tcp_socket.setblocking(False)  # 设置套接字为非堵塞的方式,解除accept()阻塞
    client_socket_list = list()
    
    while True:
        try:
            new_socket, new_addr = tcp_socket.accept()
        except Exception as e:
            print('没有新的客户端到来')
        else:
            client_socket_list.append(new_socket)        
            print('没有异常产生,来了一个客户端')
            new_socket.setblocking(False)  # 将新的套接字设置套接字为非堵塞的方式,解除调用recv方法的等待客户端发送数据时的阻塞
        for client_socket in client_socket_list:
            try:
                recv_data = client_socket.recv(1024)
            except Exception as e:
                print('这个客户端还有没发送数据过来')
            else:
                print('已经收到这个客户端的信息')
                print(recv_data)
                if recv_data:
                    print("客户端发送数据中")
                else:  # 客户端调用了close(),导致传送过来的数据为空
                    client_socket.close()  #关闭这个套接字
                    client_socket_list.remove(client_socket)  # 这个套接字已经完成交互,将其移除出列表
  • 相关阅读:
    wrk压测工具使用
    Mac 抓包工具wireshark使用
    hadoop无法停止
    非root用户如何使用docker命令
    too many open files
    kafka性能测试1.0.0
    命令查看linux主机配置
    ELK(Logstash+Elasticsearch+Kibana)的原理和详细搭建
    分布式session实现
    NUC972裸机调试步骤
  • 原文地址:https://www.cnblogs.com/kogmaw/p/12602508.html
Copyright © 2011-2022 走看看