zoukankan      html  css  js  c++  java
  • Web服务器-并发服务器-多进程(3.4.1)

    @

    1.优化分析

    在单进程的时候,相当于
    是来一个客户,派一个人去服务一下
    效率低,现在使用多进程来服务
    假设场景 100个人同时访问页面
    单进程:一次处理,后面的会等待时间长
    多进程:并发处理,一起处理
    当然进程不能越多越好,硬件不支持
    线程的开销比进程少,但最好使用协程

    注意
    用process来创建子进程的时候,子进程会复制主进程的资源
    全局变量和局部变量都会复制

    2.代码

    from socket import *
    import  re
    import  multiprocessing
    def service_client(new_socket):
        '''为这个客户端返回数据'''
    
        # 1.接收浏览器发送过来的请求,即http请求
        #GET /HTTP/1.1
        # ...
        request = new_socket.recv(1024).decode("utf-8")
        request_lines = request.splitlines()
        print(request_lines)
    
        #GET /index.html HTTP/1.1
        #get post put del
        ret = re.match(r"[^/]+/[^ ]*",request_lines[0])
        file_name = ""
        if ret:
            file_name = ret.group(0)
    
        #2,返回http格式的数据给浏览器
        #2.1准备发送给浏览器的数据 ---header
        response = "HTTP/1.1 200 OK
    "#正常浏览器
    代表的是换行
        response += "
    "
        #2.2准备发送给浏览器的数据
        response =  response + file_name
        new_socket.send(response.encode("utf-8"))
    
        #3.关闭套接字
        new_socket.close()
    
    
    def main():
        '''用来完成整体的控制'''
        #1.创建套接字
        tcp_server_socket = socket(AF_INET, SOCK_STREAM)
    
        # 2.绑定本地信息
        port = 7777
        address = ('', port)
        tcp_server_socket.bind(address)
    
        # 3.变为监听,将主动套接字变为被动套接字
        tcp_server_socket.listen(128)
    
        #等待连接
        while True:
            client_socket, clientAddr = tcp_server_socket.accept()
    
            #多进程处理
            p = multiprocessing.Process(target=service_client,args=(client_socket,))
            p.start()
    
            client_socket.close()
    
        # 关闭监听套接字
        tcp_server_socket.close()
    
    
    if __name__ == "__main__":
        main()
    
    

    3.

    关于作者

    个人博客网站
    个人GitHub地址
    个人公众号:
    在这里插入图片描述

  • 相关阅读:
    SCAU 9504 面试
    SCAU 9503 懒人选座位
    SCAU 8628 相亲
    SCAU 10691 ACM 光环
    SCAU 8626 原子量计数
    SCAU 10674 等差对
    HDU ACM 1048 The Hardest Problem Ever (水题)
    SCAU 9502 ARDF
    SCAU 10686 DeathGod不知道的事情
    SCAU 8629 热身游戏(高精度)
  • 原文地址:https://www.cnblogs.com/simon-idea/p/11399412.html
Copyright © 2011-2022 走看看